我有一个自定义的MSBuild任务,其中包括将嵌入式资源添加到解决方案中的其他项目。添加我想要的资源然后构建这些项目,但发现我无法在Visual Studio中使用它。
为了测试,我完全剥离了自定义任务,并在Silverlight解决方案的Web项目中重新定义了一个简单的AfterBuild目标。目标使用MSBuild任务在解决方案中构建Silverlight应用程序项目,如下所示:
<Target Name="AfterBuild">
<PropertyGroup>
<LinkedProject>..\SilverlightApplication1\SilverlightApplication1.csproj</LinkedProject>
</PropertyGroup>
<MSBuild Condition="'$(LinkedProject)' != '' "
Projects="$(LinkedProject)"
Targets="Build"
Properties="CustomFlag=true" >
</MSBuild>
</Target>
奇怪的是,这在从命令行使用MSBuild时非常有效,但在构建Web项目时在Visual Studio中不起作用。我认为这可能是某种Silverlight问题,并且让任务构建一个.NET类库项目,但结果是相同的 - 它从命令行工作但不在VS中。在VS中没有实际错误 - 只是Csc任务不编译程序集并且不生成输出。
在Visual Studio中使用它需要做什么?
答案 0 :(得分:1)
将'UseHostCompilerIfAvailable = false'属性传递给MSBuild任务。
如果从MSBuild任务调用csc,它看起来像Visual Studio中断,因为它重用了其进程内主机编译器的初始项目构建设置。就我而言,我正在构建同一个项目两次 - 默认构建使用目标框架v3.5,并使用指定v4.0的AfterBuild MSBuild任务。我最终遇到了同样的问题 - csc似乎运行但没有输出。我认为发生的事情是,当UseHostCompilerIfAvailable属性设置为true时,csc正在调用托管编译器,它重用了我的初始项目设置,所以即使命令行显示csc“构建”我的v4.0程序集,主机编译器也只是覆盖我刚刚建立的v3.5!
答案 1 :(得分:0)
将Visual Studio详细程度更改为详细信息并检查构建日志。我认为如果你的文件没有改变就不会执行CoreBuild,所以你可以尝试使用AfterCompile而不是AfterBuild。