通过NuGet的条件程序集引用

通过NuGet的条件程序集引用,nuget,conditional-compilation,assembly-references,nuget-spec,Nuget,Conditional Compilation,Assembly References,Nuget Spec,我有一个visualstudio解决方案(),其中包含一组复杂的程序集引用,我希望使用NuGet解决它。引用取决于目标配置,而不是.Net平台 问题定义 该解决方案有许多项目,其中大多数都引用一组通用的程序集。存在公开API更改的不同程序集版本。源代码包含用于管理版本差异的分散代码。因此,项目和解决方案有许多配置;项目引用根据配置而变化 当前状态 每个项目都导入一个公共MSBuild文件,使用 ,正如您在中所看到的。 引用程序集必须位于解决方案级别的公用文件夹中,每个版本位于不同的子文件夹中 例

我有一个visualstudio解决方案(),其中包含一组复杂的程序集引用,我希望使用NuGet解决它。引用取决于目标配置,而不是.Net平台

问题定义

该解决方案有许多项目,其中大多数都引用一组通用的程序集。存在公开API更改的不同程序集版本。源代码包含用于管理版本差异的分散代码。因此,项目和解决方案有许多配置;项目引用根据配置而变化

当前状态

每个项目都导入一个公共MSBuild文件,使用 ,正如您在中所看到的。 引用程序集必须位于解决方案级别的公用文件夹中,每个版本位于不同的子文件夹中

例如,源代码包含

#if TFS2015 || TFS2015u1
using ILocationService = Microsoft.VisualStudio.Services.Location.Server.ILocationService;
#elif TFS2013
using ILocationService = Microsoft.TeamFoundation.Framework.Server.TeamFoundationLocationService;
#else
#error Define TFS version!
#endif
该解决方案有一个
Debug-2013
配置,用于定义
TFS2013
编译符号并导入MSBuild代码段

<Reference Include="Microsoft.TeamFoundation.Server.Core, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <SpecificVersion>True</SpecificVersion>
      <HintPath>$(SolutionDir)References\2013\Microsoft.TeamFoundation.Server.Core.dll</HintPath>
</Reference>
当前状态的负面影响

此解决方案的缺点是管理引用文件夹。在每台新的客户机上,我都需要复制正确的文件,build server也是如此。 我想用NuGet来处理这场混乱

NuGet尝试#1

我在
.nuspec
文件中尝试了这个

<files>
    <file src=".\References\TfsReferences.target" target="content\References\TfsReferences.target" />
    <file src=".\References\2013\*.dll" target="content\References\2013" />
    <file src=".\References\2015\*.dll" target="content\References\2015" />
    <file src=".\References\2015.1\*.dll" target="content\References\2015.1" />
    <file src=".\References\2015.2\*.dll" target="content\References\2015.2" />
</files>


但它结束了在每个项目上创建引用文件夹的过程,并没有解决条件引用问题。

我将考虑创建一个NuGet包,其中包含定义了所有条件引用的a。我将考虑创建一个NuGet包,其中包含定义了所有条件引用的a。
<files>
    <file src=".\References\TfsReferences.target" target="content\References\TfsReferences.target" />
    <file src=".\References\2013\*.dll" target="content\References\2013" />
    <file src=".\References\2015\*.dll" target="content\References\2015" />
    <file src=".\References\2015.1\*.dll" target="content\References\2015.1" />
    <file src=".\References\2015.2\*.dll" target="content\References\2015.2" />
</files>