如何使用MSBuild更改文件的生成操作

如何使用MSBuild更改文件的生成操作,msbuild,Msbuild,我们在项目中使用NHibernate,需要将所有.hbm.xml文件嵌入到资源中。 为了自动化这项枯燥的任务,我们将此目标定义添加到项目文件中: <Target Name="BeforeBuild"> <ItemGroup> <EmbeddedResource Include="**\*.hbm.xml" /> </ItemGroup> </Target> 只有当所有hbm.xml文件都没有生成操作时,它才

我们在项目中使用NHibernate,需要将所有.hbm.xml文件嵌入到资源中。 为了自动化这项枯燥的任务,我们将此目标定义添加到项目文件中:

<Target Name="BeforeBuild">    
  <ItemGroup>
    <EmbeddedResource Include="**\*.hbm.xml" />
  </ItemGroup>
</Target>

只有当所有hbm.xml文件都没有生成操作时,它才起作用。但在我们的项目中,一些文件被手动设置为嵌入式资源,现在没有机会更改所有文件

因此,我们得到了生成错误“在“Resources”参数中多次指定了该项,并且这两项对于“LogicalName”元数据具有相同的值。“Resources”参数不支持重复项,除非它们对于“LogicalName”元数据具有不同的值。”


是否可以编写一个只更改.hbm.xml文件的生成操作的目标,而不使用生成操作(或不使用嵌入式资源)?

在将它们全部添加到中之前,是否可以先删除已设置为嵌入式资源的文件

<ItemGroup>
  <EmbeddedResource Remove="**\*.hbm.xml" />
  <EmbeddedResource Include="**\*.hbm.xml" />
</ItemGroup>


不,它不工作。当重新加载项目文件VS显示错误时,“unrecognized”中元素的属性“Remove”显示为错误还是警告?VS通常为实际正确的msbuild文件显示XML验证警告。如果这只是一个警告,请查看上述操作是否确实导致生成成功,如果是,您可以更新VS使用的模式并避免警告。抱歉,这是我的错误。它很好用。非常感谢你。