通过NuGet进行条件汇编引用

时间:2016-04-09 09:49:50

标签: nuget conditional-compilation assembly-references nuget-spec

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

问题定义

解决方案包含许多项目,其中大多数都引用了一组通用程序集。有不同的程序集版本公开API更改。源代码包含分散的conditional compiles #ifs以管理版本的差异。因此,项目和解决方案有许多配置;项目参考因配置而异。

当前状态

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

例如,源代码包含

#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>

指向正确的程序集版本。 类似的Debug-2015配置定义了TFS2015编译符号和导入

<Reference Include="Microsoft.TeamFoundation.Server.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>$(SolutionDir)References\2015\Microsoft.TeamFoundation.Server.Core.dll</HintPath>
</Reference>

当前状态的缺点

此解决方案的缺点是管理Reference文件夹。在每台新客户端计算机上,我需要复制正确的文件,同样用于构建服务器。 我想用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>

但它结束了在每个项目上创建一个Reference文件夹,但没有解决条件引用。

0 个答案:

没有答案