【问题标题】:Copy output of custom target in one CSPROJ into another CSPROJ将一个 CSPROJ 中自定义目标的输出复制到另一个 CSPROJ
【发布时间】:2022-01-14 01:52:55
【问题描述】:

所以我正在用 C#/.NET 为自己开发一个游戏引擎框架,并且我一直在尝试简化构建着色器文件(渲染引擎使用我想从 GLSL 源生成的 SPIR-V 文件)。 我目前的方法是使用导入到 CSPROJ 中的自定义 .targets 文件,该文件定义了一个自定义目标,如下所示:

<Target
    Name="Vert"
    AfterTargets="Build">
    <MakeDir Directories="$(OutputPath)%(VertShader.RelativeDir)"/>
    <Exec Command='"$(ENGINE_ROOT)\tools\glslang\windows-x64\glslangValidator.exe" -V %(VertShader.Identity) %(VertShader.OptLevel) -o $(OutputPath)%(VertShader.Identity).spv'></Exec>
</Target>

这背后的总体思路是它获取 VertShader 项目,通过 glslang 运行 .vert 文件,并将输出 .vert.spv 文件吐出到构建输出目录中。 这很好用,几乎

问题是,如果我的项目 A 有一堆着色器,然后项目 B 引用了项目 A,我想将项目 A 生成的 .vert.spv 着色器复制到构建输出目录中项目 B 的,但我没有太多运气来争论目标语法来做我想做的事。

有什么方法可以让我按照我描述的方式工作吗?

【问题讨论】:

    标签: c# msbuild game-development msbuild-target


    【解决方案1】:

    我不确定我是否正确理解了您的问题,但如果您希望将 .vert.spv 复制到另一个文件夹,请使用 File.Copy()

    【讨论】:

    • 要点是我需要项目 A 包含一些着色器文件,而我 想要 是项目 B 能够引用项目 A 并编译这些着色器文件并当我构建时,放置在它自己的输出目录中,与 EXE 并排。
    【解决方案2】:

    好吧,我认为我确实设法自己弄清楚了,添加一个答案以防它对其他人有帮助。 将此添加到我的 .targets 文件似乎允许将它们复制到任何依赖项目。我相信这基本上是在注册我正在创建的所有文件,其中包含 MSBuild 复制到当前构建输出目录的文件列表(这会导致它们被复制到任何引用它的项目中)一)

    <Target
        Name="IncludeVert"
        BeforeTargets="GetCopyToOutputDirectoryItems">
        <ItemGroup>
            <CompiledVerts Include="@(VertShader -> '$(OutputPath)%(RelativeDir)%(Filename).vert.spv' )">
                <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
                <TargetPath>%(RelativeDir)%(Filename).vert.spv</TargetPath>
            </CompiledVerts>
            <AllItemsFullPathWithTargetPath Include="@(CompiledVerts->'%(FullPath)')"  />
        </ItemGroup>
    </Target>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      相关资源
      最近更新 更多