在 Visual Studio C++ 项目中,我可以定义自定义构建操作和相应的属性规则(请参阅 MSBuild 文件夹下的
cl.xml
)。如何在 C# 项目中为自定义构建操作创建这样的规则?在 MSBuild 文件夹下有一个文件 Microsoft.CSharp.CurrentVersion.targets
,它引用 CSharp.ProjectItemsSchema.xaml
、CSharp.xaml
和 CSharp.BrowseObject.xaml
,看起来与我需要的定义完全相同。使用 procmon 我可以看到这些文件根本没有被访问。定义自定义构建操作的正确方法是什么?
为了澄清我想要完成的任务,这里有一个例子:
生成的项目文件将包含如下数据:
<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# 项目中完成此任务?
定义自定义构建操作的正确方法是什么?
您可以使用 MSBuild Targets 或 导入的 .targets 文件在项目文件中定义自定义构建操作。
- 我将图像文件(.png)添加到项目中 对于此构建操作,您可以在目标中使用复制任务将图像文件复制到项目文件夹:
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="c:\MyProject\Destination"
/>
</Target>
- 我有一个特殊的图像资源“编译器”来转换图像(该编译器是使用 msbuild 目标定义的)
对于此构建操作,您可以导入该 MSBuild 目标。
- 我想更改图像文件的属性。
在 C# 项目中,图像属性也保存为 MSBuild 项元数据并转发到 MSBuild 目标。
- 在 VC++ 项目中,可以在 Visual Studio 提供的属性窗口中轻松编辑此元数据。 Visual Studio 使用的定义来自规则 xml 文件,类似于我提到的 cl.xml。我如何在 C# 项目中完成此任务?
据我所知,我们无法使自定义项目具有可在属性窗口中编辑的附加元数据。这仅适用于 C++ 和 C++/CLI 项目。 .NET 项目(C# 和 Visual Basic)没有那么多需要调整的选项。您可以参考在 Visual C++ 中共享项目属性了解更多详细信息。