【发布时间】:2021-04-27 07:58:01
【问题描述】:
我按照几个月的教程设置了一个构建任务,它允许使用单个命名参数。
但是,我想升级任务以包含多个参数。我遇到了一些困难。
这是我当前的目标文件...
<Project>
<PropertyGroup>
<ThisAssembly>$(MSBuildThisFileDirectory)bin\Debug\netstandard2.0\ourapp.build.dll
</ThisAssembly>
<FirstRun>false</FirstRun>
<FirstRun Condition="!Exists('$(ConstantGeneratorOutputFile)')">true</FirstRun>
</PropertyGroup>
<UsingTask TaskName="ourapp.ConstantGeneratorTask"
AssemblyFile="$(ThisAssembly)" />
<!-- Pointing 'Outputs' to a non existing file will disable
up-to-date checks and run the task every time, there's probably a better way -->
<Target Name="ourapp"
BeforeTargets="BeforeCompile;CoreCompile"
Inputs="@(ConstantGeneratorSourceFiles)"
Outputs="$(ConstantGeneratorOutputFile).nocache">
<ConstantGeneratorTask
SourceFiles="@(ConstantGeneratorSourceFiles)"
OutputFile="$(ConstantGeneratorOutputFile)"
AppXamlFile="$(ConstantGeneratorAppXamlFile)"
NameSpaceName="$(ConstantGeneratorNameSpaceName)"/>
<ItemGroup Condition="Exists('$(ConstantGeneratorOutputFile)')">
<FileWrites Include="$(ConstantGeneratorOutputFile)" />
<Compile Include="$(ConstantGeneratorOutputFile)"
Condition="$(FirstRun) == 'true'" />
</ItemGroup>
</Target>
</Project>
这是读取这些参数的代码...
namespace ourapp
{
public class ConstantGeneratorTask : Task
{
[Required]
public string OutputFile { get; set; } = "";
[Required]
public ITaskItem[] SourceFiles { get; set; } = Array.Empty<ITaskItem>();
[Required]
public string NameSpaceName { get; set; } = "";
[Required]
public string AppXamlFile { get; set; } = "";
这是 csproj 参数
<ConstantGeneratorOutputFile>$(MSBuildThisFileDirectory)/Common/Constants.cs
</ConstantGeneratorOutputFile>
<ConstantGeneratorAppXamlFile>$(MSBuildThisFileDirectory)/App.xaml
</ConstantGeneratorAppXamlFile>
<ConstantGeneratorNameSpaceName>ourapp.Common
</ConstantGeneratorNameSpaceName>
我想提供这样的东西..
<Items>
<Item XamlFile="$(MSBuildThisFileDirectory)/App.xaml"
NS="ourapp.Common"
OutputFile="$(MSBuildThisFileDirectory)/Common/Constants.cs" />
<Item XamlFile="$(MSBuildThisFileDirectory)/Resources/AutomationIds.xaml"
NS="ourapp.Resources"
OutputFile="$(MSBuildThisFileDirectory)/Common/AutomationIds.cs" />
</Items>
谁能指出我正确的方向?
【问题讨论】:
-
您想从当前状态更改什么?您在定义或传递
ConstantGeneratorSourceFiles项目(例如<ItemGroup><ConstantGeneratorSourceFiles Include="**/*.foobar"/></ItemGoup>)时遇到问题吗? -
我不确定如何在 csproj 中对项目进行分组以及如何读取目标文件。
标签: c# visual-studio msbuild