c# - 为 .NET 4 和 .NET 4.5 构建整个解决方案并将文件复制到特定文件夹

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

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

我们有一个工作构建服务器 (TFS2012),每晚构建一次所有解决方案。目前我们被错误淹没,因为无法构建 .NET 4 项目或 .NET 4.5 项目,具体取决于 checkin 的 .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 库 代码在两个不同的位置,以便它们可以被引用 其他项目)?

最佳答案

本质上,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>

关于c# - 为 .NET 4 和 .NET 4.5 构建整个解决方案并将文件复制到特定文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24822378/

相关文章:

c# - if 语句有多个条件而不是使用 AND

.net - 找不到类型或命名空间名称 'Newtonsoft'

c# - 为什么以下字符串比较代码在附加 0x81 后返回 TRUE

iis - 无法在模拟器中调试azure项目

c++ - Visual Studio 2012 不生成 .exe

c# - 无法生成临时类(结果=1)CS0200

c# - 使用 C# 程序从 PC 麦克风获取音频

c# - 由非托管 (C++) COM 服务器实例化的托管 (C#) 控件在 Windows 更新后损坏

c# - Windows 服务打印 PDF

c# - 在本地计算机上调试 Windows 应用商店应用程序