NuGet - Dependee项目根据所选的构建配置引用不同的DLL

时间:2015-05-11 15:33:25

标签: c# .net visual-studio nuget

我对NuGet完全陌生,此刻只是研究/概念验证:

是否可以以这样的方式打包NuGet包:依赖项目(具有依赖项的项目)根据项目配置构建引用不同的DLL?

示例:

Dependee-Debug.DLL -> References Dependency-Debug.DLL
Dependee-Release.DLL -> References Dependecy-Release.DLL

类似地,我需要重复此行为以进行32位/ 64位区分。如果可以的话,是否有一个教程可以解释如何在任何地方?我找不到任何关于此功能的提及。

2 个答案:

答案 0 :(得分:2)

您应该能够使用PowerShell脚本或使用自定义MSBuild目标文件,根据当前构建配置引用不同的程序集。请注意,使用MSBuild目标文件将在MonoDevelop和Xamarin Studio中跨平台工作,而PowerShell脚本则不会。

NuGet允许您包含MSBuild目标文件,以便您可以更改构建时发生的情况。在MSBuild目标文件中,您可以获取引用,并根据当前构建配置使其成为条件。

在NuGet包的build目录中,添加一个与NuGet包ID同名的MSBuild .targets文件。如果需要,您还可以将特定目标框架(例如Net40)下的.targets文件放在Net40子目录下。

build\MyPackageId.targets

然后在MSBuild .targets文件中,您可以执行一些简单的操作,例如有条件地添加引用。

<ItemGroup Condition=" '$(Platform)' == 'x86' ">
    <Reference Include="MyAssembly">
      <HintPath>x86\MyAssembly.dll</HintPath>
    </Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
    <Reference Include="MyAssembly">
      <HintPath>x64\MyAssembly.dll</HintPath>
    </Reference>
</ItemGroup>

答案 1 :(得分:1)

可以在程序包安装期间运行PowerShell脚本来编辑CSPROJ文件以有条件地引用不同的依赖项。

检查this问题,找出几个有用的链接。