gpt4 book ai didi

msbuild - 如何使用 msbuild 在构建期间生成文件

转载 作者:行者123 更新时间:2023-12-04 06:34:53 24 4
gpt4 key购买 nike

有谁知道如何修改 csproj 文件以在构建期间生成代码文件而不实际引用文件?

一个过程,如:

  • 创建文件,
  • 在构建期间动态引用临时文件
  • 编译后的程序集有额外的成员,具体取决于构建期间创建的文件

  • 这样做的目的是创建一种使用 roslyn 而不是使用 t4 模板生成代码文件的方法,一旦您尝试根据属性执行某些操作,使用 t4 模板会非常尴尬。

    因此,我计划提供一种使用特殊 csharp 文件(用于完整语法支持)根据该特殊文件的内容以编程方式生成文件的方法。

    我花了几个星期在互联网上寻找资源(主题为 msbuild),但直到现在我似乎没有使用正确的关键字。

    这个对我来说是最有见地的:
    https://www.simple-talk.com/dotnet/.net-tools/extending-msbuild/

    我的猜测是,我的目的正确的构建目标应该是“BeforeCompile”,以便以某种方式使用自定义代码文件填充构建过程。

    有没有人对我的问题有经验,或者知道处理该任务的任何特定资源?

    我得到的解决方案:
    <UsingTask TaskName="DynamicCodeGenerator.DynamicFileGeneratorTask" AssemblyFile="..\DynamicCodeGenerator\bin\Debug\DynamicCodeGenerator.dll" />
    <Target Name="DynamicCodeGeneratorTarget" BeforeTargets="BeforeBuild;BeforeRebuild">
    <DynamicFileGeneratorTask>
    <Output ItemName="Generated" TaskParameter="GeneratedFilePaths" />
    </DynamicFileGeneratorTask>
    <ItemGroup>
    <Compile Include="@(Generated)" />
    <FileWrites Include="@(Generated)" />
    <!-- For clean to work properly -->
    </ItemGroup>
    </Target>

    不幸的是,我没有按照建议使用属性组覆盖

    更新:这个链接也很有趣: https://github.com/firstfloorsoftware/xcc/blob/master/FirstFloor.Xcc/Targets/Xcc.targets

    最佳答案

    生成代码文件可以通过msbuild task来实现或 msbuild inline task .由您来生成正确的代码。您必须注意的一件事是创建输出项参数,以便将其附加到 @(Compile) 项。您可以使用 $(IntDir) location 来定位您新生成的文件,并将它们添加到 @(FileWrites) 项目组中,以便 清洁 目标工作正常。

    当你写完你的任务后,你必须像这样在你的项目中使用它:

    <UsingTask TaskName="TaskTypeFullName" AssemblyFile="YourAssembly.dll"/>
    <PropertyGroup>
    <!-- Here you need to experiment with [Build/Compile/SomeOther]DependsOn property -->
    <BuildDependsOn>
    MyCodeGenerator;
    $(BuildDependsOn)
    </BuildDependsOn>
    </PropertyGroup>

    <Target Name="MyCodeGenerator">
    <YourTaskName>
    <Output ItemName="Generated" TaskParameter="GeneratedFiles" />
    </YourTaskName>
    <ItemGroup>
    <Compile Include="@(Generated)" />
    <FileWrites Include="@(Generated)" /> <!-- For clean to work properly -->
    </ItemGroup>
    </Target>

    关于msbuild - 如何使用 msbuild 在构建期间生成文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32670078/

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