dot*_*NET 3 hlsl msbuild-task visual-studio fragment-shader
我有一个旧的类库项目,在以前版本的 Visual Studio (2017 IIRC) 中构建得很好。该项目包含一个基于 HLSL 的像素着色器,可生成径向颜色选择器。我刚刚将它移植到 VS2022,它不再构建,告诉我它找不到构建任务。这是错误消息:
无法从程序集 ShaderBuildTask 加载“ShaderBuildTask.PixelShaderCompile”任务,Version=1.0.3072.18169,Culture=neutral,PublicKeyToken=44e467d1687af125。无法加载文件或程序集“ShaderBuildTask,Version=1.0.3072.18169,Culture=neutral,PublicKeyToken=44e467d1687af125”或其依赖项之一。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项均可用,并且任务包含实现 Microsoft.Build.Framework.ITask.AngularGradientShaderEffect 的公共类
我已经ShaderBuildTaskSetup.msi在我的机器上安装了所需的着色器编译器 ( )。重新加载项目并重新启动 VS 也没有帮助。
有人在 VS2022 中使用像素着色器来看看我缺少什么吗?
人们可以在 Internet 上的各个地方看到使用和讨论的 MsBuild 任务程序集ShaderBuildTask已经有 10 多年前的历史了,它是用 C++ 为 x86 处理器编写的。它还取决于今天可能不存在或无法轻松加载的文件(DirectX9 等)。
该程序集仅包含一项任务,即PixelShaderCompile. .fx它的作用是从项目(顺便说一句,不一定是 C# 项目)中获取文件(“效果文件”),将它们编译为.ps文件(使用D3DXCompileShader 函数或类似函数)并将它们作为资源添加到项目中。
这项工作可以用 Windows SDK 的Effect Compiler 工具(fxc.exe)和MsBuild Exec 任务来代替。例如,此任务将项目中的所有 .fx 文件编译为 .ps 文件,就像PixelShaderCompile:
<Exec Command=""$(MSBuildProgramFiles32)\Windows Kits\10\bin\10.0.22621.0\x64\fxc.exe" /T ps_3_0 /Fo @(Effect -> '%(Filename).ps') @(Effect)"/>
Run Code Online (Sandbox Code Playgroud)
请注意,需要Windows SDK,并且路径必须适应其当前版本(此处为 10.0.22621.0)。
因此,要整合此任务,您必须:
1> 删除
<UsingTask TaskName="ShaderBuildTask.PixelShaderCompile" AssemblyName="ShaderBuildTask, Version=1.0.3072.18169, Culture=neutral, PublicKeyToken=44e467d1687af125" />
Run Code Online (Sandbox Code Playgroud)
或项目文件中的类似行(此处为 .csproj)。
2> 更换线路
<Target Name="EffectCompile" Condition="'@(Effect)' != '' ">
<PixelShaderCompile Sources="@(Effect)">
<Output TaskParameter="Outputs" ItemName="Resource" />
</PixelShaderCompile>
</Target>
Run Code Online (Sandbox Code Playgroud)
通过这样的事情:
<Target Name="EffectCompile" Condition="'@(Effect)' != '' ">
<Exec Command=""$(MSBuildProgramFiles32)\Windows Kits\10\bin\10.0.22621.0\x64\fxc.exe" /T ps_3_0 /Fo %(Effect.RelativeDir)%(Effect.FileName).ps %(Effect.Identity)"/>
<!-- Add this if you need to embed the file as WPF resources -->
<ItemGroup>
<Resource Include="%(Effect.RelativeDir)%(Effect.FileName).ps" />
</ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
请注意,这样做的一个额外好处是您可以调整fxc.exe命令行以满足您无法完成该PixelShaderCompile任务的某些特定需求。
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |