当前情况的简短描述:我们有两个解决方案和一堆通用的“帮助”库。我们需要 .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”:
蓝色的小箭头表示文件链接,如您所见:主要代码在“Dapper NET40”中,“Dapper NET35”和“Dapper NET45”使用相同的文件(“Dapper NET45"还添加了一个附加文件)。
为了强调为什么需要单独维护引用,这里是 .NET 4.5 的“StackExchange.Redis”:
(干净整洁)- 这是 .NET 4.0 的“StackExchange.Redis”:
额外的引用来自 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/