I have a Visual Studio 2022 solution, with multiple projects, but four in particular are interesting here.
Provider1
which is based on .NET Framework 4.Provider2
which is based on .NET 6.Provider1Test
which is based on .NET Framework 4.Provider2Test
which is based on .NET 6.
The Provider1
project has a number of classes, all in the Provider.Data
namespace, one of them being Class1
. This is my source code. The Provider1.csproj
file:
<ItemGroup>
<Compile Include="Class1.cs">
<SubType>Code</SubType>
</Compile>
...
</ItemGroup>
The Class1.cs
file:
namespace Provider.Data
{
public class Class1
{
...
}
}
The Provider2
project has links to these source files, i.e. "Add"->"Existing item"->"As link". It compiles with different conditional compilation symbols, so the output is not the same as for the Provider1
project.
The Provider2.csproj
file:
<ItemGroup>
<Compile Include="..\Provider1\Class1.cs" Link="Class1.cs" />
</ItemGroup>
The Provider1Test
project is an NUnit test project, that tests Provider1
. It has multiple test classes, one of them is TestClass1
.
The Provider2Test
project is also a NUnit test project, with a ProjectReference to Provider2
. It links to the test classes in Provider1Test
in the same way as the source code does. The Provider2Test.csproj
file:
<ItemGroup>
<ProjectReference Include="..\Provider2\Provider2.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\Provider1Test\TestClass1.cs" Link="TestClass1.cs" />
</ItemGroup>
The TestClass1.cs
file:
using Provider.Data;
namespace ProviderTests
{
public class TestClass1
{
...
}
}
Now, this builds and runs just fine inside Visual Studio, but if I navigate to the Provider2Test
folder and try to build with the dotnet build
command, it doesn't find the source code.
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.
What is the issue here, why doesn't dotnet build
follow the reference path here, and how do I solve it?
I tried to create a TestClass2.cs
file directly in Provider2Test
, that is not a link but a standard compile include, and also using the Provider.Data
namespace. It produces the same error.