是否有推荐的方法可以使用MSBuild配置针对TeamCity中多个框架的NuGet包?
我已经阅读了一些帖子(见下面的参考资料),还没有找到一个针对我的技术堆栈的最佳实践指南 目标:通过TeamCity使用MSBuild和NuGet创建一个单一的NuGet包,目标是通过单个.csproj文件构建多个.NET框架 约束条件:是否有推荐的方法可以使用MSBuild配置针对TeamCity中多个框架的NuGet包?,msbuild,teamcity,nuget,.net-framework-version,multitargeting,Msbuild,Teamcity,Nuget,.net Framework Version,Multitargeting,我已经阅读了一些帖子(见下面的参考资料),还没有找到一个针对我的技术堆栈的最佳实践指南 目标:通过TeamCity使用MSBuild和NuGet创建一个单一的NuGet包,目标是通过单个.csproj文件构建多个.NET框架 约束条件: 仅从VCS中提取一次代码 所有已编译程序集的版本应相同 单个.csproj(不是每个目标框架一个) 我有两个想法: 创建单个生成配置。它将包含三个构建步骤:编译.NET3.5、编译.NET4.0和打包NuGet。每个构建步骤都取决于最后一步的成功。我看到这种方法
这是我的首选解决方案(选项1): 魔术依赖于一个不幸的变通方法。如果你愿意做出妥协,这个解决方案确实有效。如果你不是,你可以跟随 单版本配置如下所示: 请注意前两个构建步骤的名称。事实上,它们分别被显式命名为.NET 3.5和4.0的TargetFrameworkVersion值 然后,在构建参数部分,我配置了以下参数: 最后,Nuget Pack步骤根据my.nuspec的文件部分执行文件路径转换:
<files>
<file src="bin\release\v3.5\*.*" target="lib\net35" />
<file src="bin\release\v4.0\*.*" target="lib\net40" />
</files>
这里有一个采用第二种方法的解决方案: 该项目包含以下生成配置和模板: 共享内部版本号生成器是链中的第一个内部版本。它只会创建一个独立版本将共享的版本号。我正在使用Nicholas Williams引用的TeamCity插件 以下是构建模板中值得注意的配置: 请注意,内部版本号来自上述共享内部版本号生成器的内部版本ID。在我的例子中,这个构建的ID是14。还要注意工件路径中的变量%TargetFrameworkVersion%。幸运的是,TeamCity几乎在任何地方都支持变量插值 为了使模板利用生成编号,它必须对该生成配置具有快照依赖关系: 最后(关于模板),构建参数与我首选解决方案中的参数几乎相同。但是,请注意附加的配置参数。这是继承的生成配置将覆盖的内容: 然后,在依赖生成中,您必须连接快照依赖项,以便生成编号(从模板继承)通过对共享生成编号生成配置的依赖项实际工作: 当然,您需要设置实际的目标框架: 配置了实际版本后,现在可以配置NuGet pack版本配置。您不需要连接到VCS根目录: 但您确实需要配置一系列依赖项(快照和工件):
最后,你完成了。我已经通过这两种方法找到了解决方案,并将很快(在时间允许的情况下)发布单独的答案。我屏住呼吸等待;-)巧合的是,我也有同样的要求。哈哈,蒂姆。我从组装信息youtrack讨论()中认出了您的名字。你和我关注的是同一个问题。本周我将尝试发布我的两个答案+1对于这两个答案,因为您花了时间编写了一本完整的手册。这里有另一种方法,不涉及任何TeamCity参数,完全使用Visual Studio项目构建配置、nuspec和TeamCity构建完成:我有同样的问题,并使用了您的解决方案的一个版本。然而,当我正在构建的组件使用NuGet包时,我遇到了问题。我的目标是v4.0和v4.5,并且依赖于EntityFramework 6.x。当我构建包的4.0版本时,我希望它使用相同版本的EF。我还没有尝试过不同的重新安装场景,但从我的研究来看,它们似乎有缺陷。