解决方案必须编译两次才能成功

时间:2014-07-09 13:30:47

标签: msbuild visual-studio-2013 nuget t4

我的一个项目是使用Clarius Transformation nuget包在构建期间转换.tt文件,而无需在每台机器上安装VS Modeling SDK。但是,在其中一个解决方案中,它似乎没有转换文件并产生许多错误。

我如何保证完成此转换?

更新

我认为问题可能是nuget包未提交源代码控制。然后visual studio需要下载包,并且只有在运行转换之后。但这只是在黑暗中拍摄的。

2 个答案:

答案 0 :(得分:0)

我不确定您的具体情况,但听起来您有一个与以错误顺序创建文件的项目之一相关的帖子/预构建操作。检查其中一个自定义构建选项是否具有此类操作,并确保它在构建顺序中处于正确位置。

答案 1 :(得分:0)

我的猜测是你正在使用较旧的基于MSBuild的软件包恢复,它会在过程中为NuGet软件包中的自定义MSBuild目标恢复NuGet软件包。

基于MSBuild的程序包还原(右键单击解决方案并选择“启用NuGet程序包还原”时启用)会将.nuget / NuGet.targets文件添加到项目中。如果您使用基于MSBuild的程序包还原,则在构建期间MSBuild将还原NuGet程序包。但是,Clarius.TransformOnBuild NuGet包的恢复时间太晚,MSBuild无法使用自定义的MSBuild Clarius.TransformOnBuild.targets并运行转换。

如果您不使用基于MSBuild的软件包还原,并依赖Visual Studio本身完成的较新的自动软件包还原,那么您的文本模板应该可以正常工作。使用较新的自动程序包还原Visual Studio在启动构建时但在启动MSBuild之前还原程序包。这意味着MSBuild正确加载了任何自定义MSBuild目标,并且可供使用。引入了较新的自动包恢复来解决这个问题。

来自NuGet site

  

在Visual Studio调用MSBuild之前还原包。这允许在MSBuild启动之前恢复通过目标/道具文件导入扩展MSBuild的包,从而确保成功构建。

使用Visual Studio 2013对此进行测试,安装了文本模板和Clarius.TransformOnBuild NuGet包,自动包还原允许文本模板在第一次构建期间运行。使用基于MSBuild的程序包还原,文本模板不会在第一次运行时运行,而是仅在NuGet程序包还原后的第二次运行时运行。

所以你的选择是:

  1. 停止使用基于MSBuild的程序包还原。
  2. 检查NuGet包到源代码管理中。
相关问题