我有一个控制台应用程序和一个图书馆.
中的控制台应用程序是.NET 8
,而库是.NET 6
.
控制台应用程序只是将该库作为项目引用来使用,并使用我创建的一些代码(使用反射)来确定DLL使用的是哪个.NET
版本.
另一方面,库应用程序使用一个包(在本例中为System.Reflection
,但不会对其做任何操作).
一旦我发布了控制台应用程序(使用dotnet publish),我希望至少csproj库中的包引用是.NET 6
,但事实并非如此.
我创建了一个示例应用程序供您判断:https://github.com/tbragaf/TestNet6WithNet8.
在这里,我有我遵循的步骤和我得到的输出触发是这样的:
TestNet6WithNet8/AppInNet8/bin/Release/net8.0/osx-arm64/publish/System.Reflection.dll; .NETCoreApp,Version=v8.0;
你能解释一下为什么这个DLL指向.NET 8
,而不是.NET 6
吗?还是我做错了什么?(可能).事实上,只有库DLL指向.NET 6
.
也许我看到的DLL是应用程序使用的,但是库中的DLL在哪里呢?
谢谢你的帮助,
我原以为System.Reflection.dll
的目标是.NET 6
,因为类库使用它,而它的目标是.NET 6
.
Update:为了便于阅读,下面你可以找到Cprojs.
AppInNET8.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RuntimeIdentifiers>win-x64;win-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibraryInNet6\LibraryInNet6.csproj" />
</ItemGroup>
</Project>
LibInNET6.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Reflection" Version="4.3.0" />
</ItemGroup>
</Project>