kaa*_*lus 24 msbuild pre-build-event visual-studio-2013
在我的项目中,我正在运行一个外部工具来更新一些二进制文件.这些文件作为"内容"包含在项目中.
此工具设置为在C#项目属性中的"预构建事件"期间运行.不幸的是,只有在项目过期时才会执行此事件,这不是我需要的.
我通过在我的项目中总是使用"rebuild"而不是"build"来解决这个问题,但这很乏味且很慢.
无论项目是否是最新的,我都需要始终执行此工具.实际上,甚至在MSBuild确定项目是否是最新的之前,因为该工具修改了项目中包含的一些文件,因此影响了最新的检查结果.
有没有正确的方法呢?
kaa*_*lus 37
这是解决方案.在项目文件中定义此属性:
<PropertyGroup>
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
无论项目是否是最新的,每次都会执行PreBuildStep.
似乎Visual Studio绕过了对MSBuild的正常最新检查,并使用某种更快的自定义检查,但具有打破自定义构建目标的副作用.
在项目级别,您有三个选项:
1)预建行动
<PropertyGroup>
<PreBuildEvent>notepad.exe Foo.txt</PreBuildEvent>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
2)正常的BeforeBuild目标
<Target Name="BeforeBuild">
<Exec Command="notepad.exe Foo.txt" />
</Target>
Run Code Online (Sandbox Code Playgroud)
3)"附加"到"构建"目标(如建议的stijn)
<Target Name="BeforeBuild2" BeforeTargets="Build">
<Exec Command="notepad.exe Foo.txt" />
</Target>
Run Code Online (Sandbox Code Playgroud)
实际上这个解决方案(在Build的情况下)将不起作用,因为DependsOnTargets是在BeforeTargets之前执行的.而且正是在DependsOnTargets中真正的(CoreBuild)坐着:)这就是他们发明'BeforeBuild'目标的原因;)
在这两种情况下,VS都会检查是否有更改(文件是最新的).如果没有改变,为什么你甚至想要运行外部程序?如果此程序在文件上工作(例如"内容"),msbuild和VS应检测文件是否过时和进程构建.
不幸的是,IDE(Visual Studio)有自己的方法来处理msbuild项目.主要机制是相同的,但是当它确定是什么项目构建或者以什么顺序确定时...... VS act totalny不同.
您可以使用外部工具并针对您的解决方案或项目运行"msbuild".这也将编译"正确的方式",二进制文件将没有什么不同,但你将拥有MsBuild的全部功能和潜力
| 归档时间: |
|
| 查看次数: |
16778 次 |
| 最近记录: |