使用dotnet build时项目引用未解析的问题排查与解决
问题:dotnet build无法识别Provider.Data命名空间的解决方案构建问题
解决方案项目结构
Provider1:基于.NET Framework 4的类库项目Provider2:基于.NET 6的类库项目Provider1Test:基于.NET Framework 4的NUnit测试项目,用于测试Provider1Provider2Test:基于.NET 6的NUnit测试项目,用于测试Provider2
项目配置细节
Provider1项目
Provider1包含多个位于Provider.Data命名空间下的类,其中Class1.cs的代码如下:
namespace Provider.Data { public class Class1 { ... } }
其Provider1.csproj中相关编译配置:
<ItemGroup> <Compile Include="Class1.cs"> <SubType>Code</SubType> </Compile> ... </ItemGroup>
Provider2项目
Provider2通过添加现有项->作为链接的方式引用Provider1的源码文件,使用不同的条件编译符号生成与Provider1不同的输出,其Provider2.csproj相关配置:
<ItemGroup> <Compile Include="..\Provider1\Class1.cs" Link="Class1.cs" /> </ItemGroup>
测试项目配置
Provider1Test包含测试类TestClass1,代码如下:
using Provider.Data; namespace ProviderTests { public class TestClass1 { ... } }
Provider2Test通过ProjectReference引用Provider2,同时以链接方式引用Provider1Test中的测试类,其Provider2Test.csproj配置:
<ItemGroup> <ProjectReference Include="..\Provider2\Provider2.csproj" /> </ItemGroup> <ItemGroup> <Compile Include="..\Provider1Test\TestClass1.cs" Link="TestClass1.cs" /> </ItemGroup>
问题现象
该解决方案在Visual Studio 2022中可正常构建并运行,但进入Provider2Test文件夹执行dotnet build命令时,出现以下编译错误:
C:\dev\DataProvider\Provider2Test>dotnet build MSBuild version 17.3.1+2badb37d1 for .NET Determining projects to restore... All projects are up-to-date for restore. Provider2 -> C:\dev\DataProvider\Provider2\bin\x64\Debug\net6.0\Provider.Data.dll 1 file(s) copied. C:\dev\DataProvider\Provider1Test\TestClass1.cs(14,7): error CS0246: The type or namespace name 'Provider' could not be found (are you missing a using directive or an assembly reference?) [C:\dev\DataProvider\Provider2Test\Provider2Test.csproj] Build FAILED.
即使在Provider2Test中直接创建使用Provider.Data命名空间的TestClass2.cs文件,也会触发相同的错误。
疑问
问题原因是什么?为何dotnet build无法识别引用路径?该如何解决?
内容的提问来源于stack exchange,提问作者Helena
相关产品推荐
相关产品推荐

