构建.NET 4和.NET 4.5的完整解决方案,并将文件复制到特定文件夹

时间:2014-07-18 10:04:39

标签: c# .net visual-studio-2012 build tfs2012

当前情况的简短描述 :我们有两个通用“帮助”库的解决方案。我们需要.NET 4和.NET 4.5的所有这些库,因为我们依赖这些库的一些项目正在不被触及的系统上运行,这意味着我们不能将.NET 4.5放在这些系统上。

我们有一个工作构建服务器(TFS2012),每晚构建一次所有解决方案。目前,由于无法构建.NET 4项目或.NET 4.5项目,我们会被错误所淹没,具体取决于签入的.csproj文件的当前状态。

我想要什么/ 什么是完美的:当某人(无论是构建服务器还是Visual Studio)编译'帮助'解决方案时,.NET 4和.NET 4.5版本这些文件的编译。 .NET 4文件被复制到C:\dll\a,.NET 4.5版本被复制到C:\dll\b

我偶然发现:http://shazwazza.com/post/multi-targeting-a-single-net-project-to-build-for-different-framework-versions/但是考虑到.csproj文件的数量,我真的不想为每个.csproj文件执行此操作。

我的问题是:

  • 有没有办法编译.NET 4和.NET 4.5的整个解决方案并将已编译的库复制到特定文件夹?

  • 如果是,我该怎么做?

  • 如果没有,是否有另一种方法可以做到这一点,从根本上导致相同的结果(相同的.NET 4和.NET 4.5库) 代码在两个不同的位置,以便它们可以被引用 其他项目)?

1 个答案:

答案 0 :(得分:1)

基本上,csproj是构建目标;虽然有些东西可以作为构建中的参数进行更改,但基础平台等更加棘手,而且每个构建目标只需维护一个不同的csproj就更好了。

你正确(评论)观察到这意味着你需要单独维护引用 - 这是不可避免的,因为一些平台使用完全不同的dll来获得相同的东西(cf,winrt等)。

但是,必然需要单独维护文件;这是portable class library build for protobuf-net

中的一行
<Compile Include="..\protobuf-net\**\*.cs" />

这意味着:在..\protobuf-net下编译所有.cs文件(递归)。您可能更喜欢在较小的项目中单独维护文件列表 - 例如,这里是“dapper”:

enter image description here

小小的箭头表示文件链接,因此您可以看到:主要代码位于“Dapper NET40”中,“Dapper NET35”和“Dapper NET45”使用相同的文件(“ Dapper NET45“还添加了一个额外的文件。”

并强调为什么需要单独维护引用,这里是.NET 4.5的“StackExchange.Redis”:

enter image description here

(很干净) - 这里是.NET 4.0的“StackExchange.Redis”:

enter image description here

额外引用来自Microsoft.Bcl,用于获取.NET 4.0中的完整Task API(和其他依赖项)(它内置于.NET 4.5中):

<packages>
  <package id="Microsoft.Bcl" version="1.1.9" targetFramework="net40" />
  <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net40" />
  <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net40" />
</packages>