gpt4 book ai didi

msbuild - 注入(inject)由 MSBuild 任务创建的 EmbeddedResource

转载 作者:行者123 更新时间:2023-12-05 07:34:38 25 4
gpt4 key购买 nike

我有一个自定义 MSBuild 任务,它根据没有构建操作的文件生成一个文件。生成的文件需要嵌入到最终的程序集中。任务看起来像这样:

public class MyTask : Task
{
public string OutputDirectory { get; set; }

public string[] NoneIncluded { get; set; }

private IEnumerable<ITaskItem> _generatedFiles;
[Output]
public ITaskItem[] GeneratedFiles => _generatedFiles.ToArray();

public override bool Execute()
{
_generatedCssFiles = new List<ITaskItem>();
foreach(var item in NoneIncluded)
{
if(someCondition)
{
var contents = DoFoo(item);
var outputPath = Path.Combine(OutputDirectory, $"{item}.txt");
File.WriteAllText(outputPath, contents);
_generatedFiles.Add(new TaskItem(ProjectCollection.Escape(outputFile)));
}
}
}
}

在我的目标文件中,我定义了如下目标:

<PropertyGroup>
<CoreCompileDependsOn>MyTarget;$(CoreCompileDependsOn);</CoreCompileDependsOn>
</PropertyGroup>

<Target Name="MyTarget"
BeforeTargets="CoreCompile;Build">

<MyTask OutputDirectory="$(IntermediateOutputPath)"
NoneIncluded="@(None)">
<Output ItemName="FilesWrite"
TaskParameter="GeneratedFiles"/>
<Output ItemName="EmbeddedResource"
TaskParameter="GeneratedFiles" />
</MyTask>

</Target>

我最终遇到了两个似乎无法解决的问题:

  1. 虽然文件是在编译任务之前生成的,但它并没有嵌入到程序集中,除非我在不清理输出的情况下重建项目。在后续构建中嵌入文件。
  2. 如果我在 IntermediateOutputPath 中生成文件,嵌入的资源 ID 将包含该路径。所以我得到的不是 MyProject.SomeResource.txt MyProject.obj.netstandard2._0.SomeResource.txt

注意:- 如果我替换 Path.Combine 并简单地在项目中生成输出文件,它会修复资源 ID 的问题,但不是第一次编译时未嵌入的第一个问题。

如何确保我生成的文件嵌入到第一次编译中,并且我可以在 IntermediateOutputPath 中生成它们,而不是在具有资源 ID 的项目目录中生成它们,就好像它在项目中一样。

最佳答案

您需要在管道中更早地运行您的目标。 CoreCompile 为时已晚。

您可以将以下内容添加到您的 .csproj 文件中。此目标将在 ResolveReferences 之前运行,并将 Image.png 添加为嵌入式资源。

<Target Name="IncludeDynamicResources" BeforeTargets="ResolveReferences">
<ItemGroup>
<EmbeddedResource Include="Image.png">
<Type>Non-Resx</Type>
</EmbeddedResource>
</ItemGroup>
</Target>

关于msbuild - 注入(inject)由 MSBuild 任务创建的 EmbeddedResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50035598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com