gpt4 book ai didi

.net - NuGet 更新和条件引用

转载 作者:行者123 更新时间:2023-12-04 15:11:26 25 4
gpt4 key购买 nike

我们的 nupkg 包包含相同 dll(x86、x64、AnyCPU)的多个版本,在 csproj 文件中,我使用条件引用根据当前平台集选择特定的 dll。因此,我对同一个库有多个引用(只是不同的平台编译)。

这是我的 csproj 文件的一个片段:

<Reference Include="xxxx" Condition="'$(Platform)'=='x86'">            
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='x64'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x64\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='AnyCPU'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\AnyCPU\xxxx.dll</HintPath>
</Reference>

这种构造在 MSBuild 和 Visual Studio 中都非常有效。

不幸的是,在 nuget 更新后,csproj 引用被搞砸了。结果如下:
<Reference Include="xxxx" Condition="'$(Platform)'=='x86'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x86\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx" Condition="'$(Platform)'=='x64'">
<HintPath>..\..\packages\xxxx.2.7.0.1093\lib\net45\x64\xxxx.dll</HintPath>
</Reference>
<Reference Include="xxxx">
<HintPath>..\..\packages\xxxx.2.7.0.1094\lib\net45\x86\xxxx.dll</HintPath>
</Reference>

所以看起来只有一个引用得到更新,并且……条件部分被删除,并且使用了列表中的第一个 dll。

不是我所期待的。任何想法如何最好地解决这个问题?有人在 nuget 的 csproj 中使用条件引用吗?任何建议将不胜感激!

最佳答案

Nuget 允许您部署自动包含在项目中的 .targets 文件(请参阅 Nuget docs )。您可以在自定义目标文件中包含条件引用,并将 dll 部署到包的工具文件夹中,这样它们就不会被 Nuget 自动添加为引用。

假设您的包名为“PackageWithConditionalReferences”。创建 nuget 包的文件夹结构可能如下所示:

tools
lib\net45\x86\xxxx.dll
lib\net45\x64\xxxx.dll
lib\net45\AnyCPU\xxxx.dll
build
PackageWithConditionalReferences.targets

其中 PackageWithConditionalReferences.targets 有内容:
    <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MyLibDir>$(MSBuildThisFileDirectory)..\tools\net45</MyLibDir>
</PropertyGroup>

<ItemGroup>
<Reference Include="xxxx", Condition="'$(Platform)' == 'x64'">
<SpecificVersion>False</SpecificVersion>
<HintPath>$(MyLibDir)\x64\xxxx.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="xxxx", Condition="'$(Platform)' == 'x86'">
<SpecificVersion>False</SpecificVersion>
<HintPath>$(MyLibDir)\x86\xxxx.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="xxxx", Condition="'$(Platform)' == 'AnyCPU'">
<SpecificVersion>False</SpecificVersion>
<HintPath>$(MyLibDir)\AnyCPU\xxxx.dll</HintPath>
<Private>True</Private>
</Reference>
</ItemGroup>

</Project>

确保你的 .targets 文件被命名为喜欢这个包。安装包后,需要重新启动 VisualStudio 才能使引用可见(使用 VisualStudio 2015 测试)。

关于.net - NuGet 更新和条件引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23393660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com