带有 "dotnet build" 或 "dotnet publish" 的 dotfuscator - 无法加载 "FindProjectAssemblies" 任务 PreEmptive.Dotfuscator.Internal.Tasks.dll
dotfuscator with "dotnet build" or "dotnet publish" - The "FindProjectAssemblies" task could not be loaded PreEmptive.Dotfuscator.Internal.Tasks.dll
在构建尝试使用 dotfuscator 的 .net 核心应用程序时,我们可以使用 msbuild.exe 成功构建和混淆,但是使用 .net 核心 cli 的任何构建或发布都会失败。
这些问题存在于使用本地命令行以及我们的 devops 构建管道中。
例子
msbuild.exe "the project file.csproj" <- 这有效并参与了 dotfuscator
dotnet build "the project file.csproj" <- 抛出以下错误。
dotnet publish "the project file.csproj" <- 还会抛出以下错误。
D:\Repos\PF\tools\dotfuscator\PreEmptive.Dotfuscator.Common.targets(262,5):错误 MSB4062:无法从程序集 D:\Repos\PF\tools\dotfuscator\PreEmptive.[ 加载 "FindProjectAssemblies" 任务。 =43=]。无法加载文件或程序集 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项可用,并且任务包含实现 Microsoft.Build.Framework.ITask 的 public class。 [D:\Repos\PF\source\xxxxx.xxxxx.xxxxx.API\xxxxx.xxxxxx.xxxxxx.API.csproj]
更新 (2019-12-20):我们发布了 a beta version of Dotfuscator Professional 6.0.0,支持 运行ning Dotfuscator on-Windows操作系统。这包括对 dotnet
命令的支持。
Dotfuscator 可以保护 .NET Core 程序集,然后可以 运行 在 .NET Core 下(即跨平台)。然而,在撰写本文时,Dotfuscator 本身 仅 运行 基于 Windows 的经典 .NET Framework。
您似乎已将 Dotfuscator Professional 集成到 the recommended way 的构建中,它使用 Dotfuscator 的 MSBuild 目标和任务。说明包括将此 <Import>
添加到您的项目文件:
<Import Project="$(MSBuildExtensionsPath)\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Common.targets"/>
当我为 .NET Core 项目执行此操作时,我可以构建 Visual Studio 或通过 msbuild /t:Publish /p:Configuration=Release
并获得受保护的应用程序。但是,如果我尝试 运行 dotnet build MyApp.csproj
或 dotnet publish MyApp.csproj
,则构建失败。一开始我收到了与您不同的错误消息:
error MSB4019: The imported project "C:\Program Files\dotnet\sdk.1.503\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Common.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.
这是因为 Dotfuscator 没有将其 MSBuild 目标安装到 .NET Core 位置,只有 .NET Framework 和 Visual Studio 位置,所以上面的 <Import>
找不到需要的文件.
如果我改为将 MSBuild 文件从 C:\Program Files (x86)\MSBuild
复制到我自己的位置,例如 C:\DotfuscatorMSBuildCopy
,并相应地更改 <Import>
:
<Import Project="C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Common.targets"/>
然后我看到你的错误:
error MSB4062: The "FindProjectAssemblies" task could not be loaded from the assembly C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Internal.Tasks.dll. Could not load file or assembly 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. Confirm that the 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.
解决方案是使用 msbuild /t:Publish /p:Configuration=Release
而不是 dotnet
来构建。
(注意:我在 Dotfuscator 团队工作,并以该身份回答问题。)
在构建尝试使用 dotfuscator 的 .net 核心应用程序时,我们可以使用 msbuild.exe 成功构建和混淆,但是使用 .net 核心 cli 的任何构建或发布都会失败。
这些问题存在于使用本地命令行以及我们的 devops 构建管道中。
例子
msbuild.exe "the project file.csproj" <- 这有效并参与了 dotfuscator
dotnet build "the project file.csproj" <- 抛出以下错误。
dotnet publish "the project file.csproj" <- 还会抛出以下错误。
D:\Repos\PF\tools\dotfuscator\PreEmptive.Dotfuscator.Common.targets(262,5):错误 MSB4062:无法从程序集 D:\Repos\PF\tools\dotfuscator\PreEmptive.[ 加载 "FindProjectAssemblies" 任务。 =43=]。无法加载文件或程序集 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'。该系统找不到指定的文件。确认声明正确,程序集及其所有依赖项可用,并且任务包含实现 Microsoft.Build.Framework.ITask 的 public class。 [D:\Repos\PF\source\xxxxx.xxxxx.xxxxx.API\xxxxx.xxxxxx.xxxxxx.API.csproj]
更新 (2019-12-20):我们发布了 a beta version of Dotfuscator Professional 6.0.0,支持 运行ning Dotfuscator on-Windows操作系统。这包括对 dotnet
命令的支持。
Dotfuscator 可以保护 .NET Core 程序集,然后可以 运行 在 .NET Core 下(即跨平台)。然而,在撰写本文时,Dotfuscator 本身 仅 运行 基于 Windows 的经典 .NET Framework。
您似乎已将 Dotfuscator Professional 集成到 the recommended way 的构建中,它使用 Dotfuscator 的 MSBuild 目标和任务。说明包括将此 <Import>
添加到您的项目文件:
<Import Project="$(MSBuildExtensionsPath)\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Common.targets"/>
当我为 .NET Core 项目执行此操作时,我可以构建 Visual Studio 或通过 msbuild /t:Publish /p:Configuration=Release
并获得受保护的应用程序。但是,如果我尝试 运行 dotnet build MyApp.csproj
或 dotnet publish MyApp.csproj
,则构建失败。一开始我收到了与您不同的错误消息:
error MSB4019: The imported project "C:\Program Files\dotnet\sdk.1.503\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Common.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.
这是因为 Dotfuscator 没有将其 MSBuild 目标安装到 .NET Core 位置,只有 .NET Framework 和 Visual Studio 位置,所以上面的 <Import>
找不到需要的文件.
如果我改为将 MSBuild 文件从 C:\Program Files (x86)\MSBuild
复制到我自己的位置,例如 C:\DotfuscatorMSBuildCopy
,并相应地更改 <Import>
:
<Import Project="C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Common.targets"/>
然后我看到你的错误:
error MSB4062: The "FindProjectAssemblies" task could not be loaded from the assembly C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\PreEmptive.Dotfuscator.Internal.Tasks.dll. Could not load file or assembly 'Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified. Confirm that the 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.
解决方案是使用 msbuild /t:Publish /p:Configuration=Release
而不是 dotnet
来构建。
(注意:我在 Dotfuscator 团队工作,并以该身份回答问题。)