我正在尝试将当前针对.NET4.0的库更新为:
使用多目标。
我正在使用的从属库为Microsoft.Build.Framework
。在两个地方都可以找到它:
NuGet
,最低级别为NET4.6 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.Build.Framework.dll
)因为nuget包的最低级别高于4.5.2,所以我无法在452目标中使用该nuget包。
因此,可以说: -使用NS20时,请使用nuget软件包。 -使用NET4.5.2时,请使用GAC版本。
谢谢!
答案 0 :(得分:1)
诀窍是修改csproj
并手动指定要在任一特定框架下使用的软件包。
这就是我最终要做的。注意:
PackageReference
:从NuGet那里获取。Reference
:从您的GAC那里获取。。
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<PackageReference Include="Microsoft.Build.Framework" Version="15.7.179" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.7.179" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net452' ">
<Reference Include="Microsoft.Build.Framework" Version="15.7.179" />
<Reference Include="Microsoft.Build.Utilities.v4.0" Version="15.7.179" />
</ItemGroup>
因此,在这里,如果框架是NS20
,我们将从NuGet获取软件包,而如果框架是NET452
,我们将从GAC获取软件包。
优胜者,鸡肉晚餐!
答案 1 :(得分:1)
您可以根据构建项目的最新目标框架有条件地定义依赖项。为此,您可以调整项目文件以在一种情况下使用NuGet依赖项,在另一种情况下使用标准的非Nuu引用。
它看起来像这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- other properties -->
<TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<!-- common references -->
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net452'">
<Reference Include="Microsoft.Build.Framework" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' != 'net452'">
<PackageReference Include="Microsoft.Build.Framework" Version="15.7.179" />
</ItemGroup>
</Project>
因此,net452
将通过Reference
element获得正常的程序集引用Microsoft.Build.Framework
,可以从GAC或本地目录中解析它,其他框架则可以使用PackageReference
。