在 VScode 中构建 WPF 应用程序时出现错误 MSB4062
Build a WPF application in VScode gave me error MSB4062
我正在尝试在 Visual Studio 代码中对 WPF (.Net Core 3.1) 执行构建(这次不是 Visual Studio 因为我需要一个更轻量级的编辑器)。通常我所有的项目可以很好地构建,但是这个 WPF 项目给了我以下错误:
C:\Program Files (x86)\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.
WinFX.targets(225,9): error MSB4062: The "Microsoft.Build.Tasks.Windows.MarkupCompilePass1" task could not be loaded from
the assembly C:\Program Files %28x86%29\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\tools\netcoreapp2.1\PresentationBuildTasks.dll. Could not load file or assembly 'C:\Program Files
%28x86%29\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\tools\netcoreapp2.1\PresentationBuildTasks.dll'. The system cannot find the path specified.
Confirm that the <UsingTask> declaration is correct, that the assembly and all
its dependencies are available, and that the task contains a public class that
implements Microsoft.Build.Framework.ITask. [E:\ui_wpf_test\ui_wpf_test.csproj]
The build failed. Fix the build errors and run again.
我听说它与 MSbuild 有关,但我不知道如何正确解决这个问题
我在 GitHub 上找到了解决方案。您必须替换以下 %ProgramFiles(x86)%\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.WinFx.props
行:
<_PresentationBuildTasksAssembly Condition="'$(_PresentationBuildTasksAssembly)'==''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\tools$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll'))</_PresentationBuildTasksAssembly>
替换为:
<_PresentationBuildTasksAssembly Condition="'$(_PresentationBuildTasksAssembly)'==''">$(MSBuildThisFileDirectory)..\tools$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll</_PresentationBuildTasksAssembly>
这最终对我有用。
小错误。应该在即将推出的新 3.1.103 而不是现在的 3.1.102 中修复。
问题出在路径 Program Files (x86)' where
(x86)is escaped to
%28x86%29`,导致找不到路径。
通过转义路径的临时修复:
转到:
C:\Program Files (x86)\dotnet\sdk.1.102\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets
编辑 Microsoft.WinFx.props 并使用此 _PresentationBuildTaskAssembly,它具有 Unescape 路径:
<_PresentationBuildTasksAssembly Condition="'$(_PresentationBuildTasksAssembly)'==''">$([MSBuild]::Unescape($([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\tools$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll'))))</_PresentationBuildTasksAssembly>
您也可以通过在 visual studio 中将构建更改为 x64 而不是 Any CPU/x86 来解决此问题。对于 64 位,这将使用 C:\Program Files\
而不是 C:\Program Files (x86)\
,因此没有 'bad' 个字符。
我正在尝试在 Visual Studio 代码中对 WPF (.Net Core 3.1) 执行构建(这次不是 Visual Studio 因为我需要一个更轻量级的编辑器)。通常我所有的项目可以很好地构建,但是这个 WPF 项目给了我以下错误:
C:\Program Files (x86)\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.
WinFX.targets(225,9): error MSB4062: The "Microsoft.Build.Tasks.Windows.MarkupCompilePass1" task could not be loaded from
the assembly C:\Program Files %28x86%29\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\tools\netcoreapp2.1\PresentationBuildTasks.dll. Could not load file or assembly 'C:\Program Files
%28x86%29\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\tools\netcoreapp2.1\PresentationBuildTasks.dll'. The system cannot find the path specified.
Confirm that the <UsingTask> declaration is correct, that the assembly and all
its dependencies are available, and that the task contains a public class that
implements Microsoft.Build.Framework.ITask. [E:\ui_wpf_test\ui_wpf_test.csproj]
The build failed. Fix the build errors and run again.
我听说它与 MSbuild 有关,但我不知道如何正确解决这个问题
我在 GitHub 上找到了解决方案。您必须替换以下 %ProgramFiles(x86)%\dotnet\sdk.1.100\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.WinFx.props
行:
<_PresentationBuildTasksAssembly Condition="'$(_PresentationBuildTasksAssembly)'==''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\tools$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll'))</_PresentationBuildTasksAssembly>
替换为:
<_PresentationBuildTasksAssembly Condition="'$(_PresentationBuildTasksAssembly)'==''">$(MSBuildThisFileDirectory)..\tools$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll</_PresentationBuildTasksAssembly>
这最终对我有用。
小错误。应该在即将推出的新 3.1.103 而不是现在的 3.1.102 中修复。
问题出在路径 Program Files (x86)' where
(x86)is escaped to
%28x86%29`,导致找不到路径。
通过转义路径的临时修复:
转到:
C:\Program Files (x86)\dotnet\sdk.1.102\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets
编辑 Microsoft.WinFx.props 并使用此 _PresentationBuildTaskAssembly,它具有 Unescape 路径:
<_PresentationBuildTasksAssembly Condition="'$(_PresentationBuildTasksAssembly)'==''">$([MSBuild]::Unescape($([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\tools$(_PresentationBuildTasksTfm)\PresentationBuildTasks.dll'))))</_PresentationBuildTasksAssembly>
您也可以通过在 visual studio 中将构建更改为 x64 而不是 Any CPU/x86 来解决此问题。对于 64 位,这将使用 C:\Program Files\
而不是 C:\Program Files (x86)\
,因此没有 'bad' 个字符。