强制文件夹中的文件具有构建操作=带有目标文件的嵌入式资源

时间:2015-08-26 06:19:46

标签: visual-studio msbuild target

Visual Studio项目有一个包含sql脚本的文件夹,其中的所有文件都必须将构建操作设置为Embedded Resource。在添加新文件时,开发人员经常忘记更改构建操作。

我想创建一个目标文件,如果文件夹中的任何文件没有正确的构建操作,则会在编译时抛出错误。

之前我见过类似的事情。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" 
         DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="MakeSureSqlFilesAreSetToCopyAlways" BeforeTargets="PrepareForBuild">
    <Error Condition="!('%(Content.CopyToOutputDirectory)' == 'Always')" 
           Text="This Content file is not configured to Copy Always: [%(Content.FullPath)]" />
  </Target>
</Project>

此代码块检查文件是否始终设置为复制。如何检查构建操作?

也会欣赏一些有关此主题的进一步阅读的链接。

提前致谢。

1 个答案:

答案 0 :(得分:2)

假设脚本文件位于名为Scripts的文件夹中,如果有任何文件的构建操作设置为Content且其路径包含单词{{1},则以下目标文件将引发错误}}

Scripts

如果您正在与忘记将脚本设置为嵌入式资源的开发人员打交道,上述内容应该足够(尽管不全面),主要是因为Visual Studio默认将新文件的构建操作设置为<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="MakeSureSqlFilesAreSetToEmbeddedAsResource" BeforeTargets="PrepareForBuild"> <Error Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('%(Content.FullPath)', 'Scripts'))" Text="This Content file is not configured as Embedded Resource: [%(Content.FullPath)]" /> </Target> </Project> 。如果您想要防弹,只需重复Content标记并将Error替换为所有可能的构建操作(Content除外)。