Visual Studio C# 项目中的自定义生成操作属性

问题描述 投票:0回答:1

在 Visual Studio C++ 项目中,我可以定义自定义构建操作和相应的属性规则(请参阅 MSBuild 文件夹下的

cl.xml
)。如何在 C# 项目中为自定义构建操作创建这样的规则?在 MSBuild 文件夹下有一个文件
Microsoft.CSharp.CurrentVersion.targets
,它引用
CSharp.ProjectItemsSchema.xaml
CSharp.xaml
CSharp.BrowseObject.xaml
,看起来与我需要的定义完全相同。使用 procmon 我可以看到这些文件根本没有被访问。定义自定义构建操作的正确方法是什么?

为了澄清我想要完成的任务,这里有一个例子:

  1. 我将图像文件(.png)添加到项目中
  2. 我有一个特殊的图像资源“编译器”来转换图像(该编译器是使用 msbuild 目标定义的)
  3. 我想更改图像文件的属性(例如目标分辨率、格式等)。在 C++ 项目中,我可以为此打开文件属性对话框。 这些属性将保存为 MSBuild 项元数据并转发到 MSBuild 目标。

生成的项目文件将包含如下数据:

<ItemGroup>
    <MyImageContent Include="Image.png">
      <OutputName>MyImage.png</OutputName>
      <TargetResX>512</TargetResX>
      <TargetResY>256</TargetResY>
    </MyImageContent>
  </ItemGroup>

自定义 MSBuild 目标可以轻松使用此附加元数据。到目前为止我知道该怎么做了。

但是:在 VC++ 项目中,可以在 Visual Studio 提供的属性窗口中轻松编辑此元数据。 Visual Studio 使用的定义来自规则 xml 文件,类似于我提到的 cl.xml。我如何在 C# 项目中完成此任务?

c# visual-studio-2015 msbuild
1个回答
4
投票

定义自定义构建操作的正确方法是什么?

您可以使用 MSBuild Targets导入的 .targets 文件在项目文件中定义自定义构建操作。

  1. 我将图像文件(.png)添加到项目中 对于此构建操作,您可以在目标中使用复制任务将图像文件复制到项目文件夹:
<Target Name="CopyFiles">  
    <Copy  
        SourceFiles="@(MySourceFiles)"  
        DestinationFolder="c:\MyProject\Destination"  
    />  
</Target> 
  1. 我有一个特殊的图像资源“编译器”来转换图像(该编译器是使用 msbuild 目标定义的)

对于此构建操作,您可以导入该 MSBuild 目标。

  1. 我想更改图像文件的属性。

在 C# 项目中,图像属性也保存为 MSBuild 项元数据并转发到 MSBuild 目标。

enter image description here

  1. 在 VC++ 项目中,可以在 Visual Studio 提供的属性窗口中轻松编辑此元数据。 Visual Studio 使用的定义来自规则 xml 文件,类似于我提到的 cl.xml。我如何在 C# 项目中完成此任务?

据我所知,我们无法使自定义项目具有可在属性窗口中编辑的附加元数据。这仅适用于 C++ 和 C++/CLI 项目。 .NET 项目(C# 和 Visual Basic)没有那么多需要调整的选项。您可以参考在 Visual C++ 中共享项目属性了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.