具有“dotnet build”或“dotnet publish”的dotfuscator - 无法加载“FindProjectAssemblies”任务PreEmptive.Dotfuscator.Internal.Tasks.dll

问题描述 投票:2回答:1

在构建尝试使用dotfuscator的.net核心应用程序时,我们可以使用msbuild.exe成功构建和混淆,但是使用.net核心cli进行的任何构建或发布都会失败。

使用本地命令行以及我们的devops构建管道中存在这些问题。

例子

msbuild.exe“项目file.csproj”< - 这适用于dotfuscator

dotnet build“the project file.csproj”< - 这会抛出下面的错误。

dotnet发布“项目file.csproj”< - 也会抛出下面的错误。

D:\ Repos \ PF \ tools \ dotfuscator \ PreEmptive.Dotfuscator.Common.targets(262,5):错误MSB4062:无法从程序集D:\ Repos \ PF \ tools \ dotfuscator \加载“FindProjectAssemblies”任务PreEmptive.Dotfuscator.Internal.Tasks.dll。无法加载文件或程序集'Microsoft.Build.Utilities.v4.0,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。该系统找不到指定的文件。确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类。 [d:\回购\ PF \源\ xxxxx.xxxxx.xxxxx.API \ xxxxx.xxxxxx.xxxxxx.API.csproj]

看起来非常像这个问题。 https://github.com/Microsoft/msbuild/issues/2111

.net-core msbuild obfuscation dotfuscator
1个回答
2
投票

Dotfuscator可以保护.NET Core程序集,然后可以在.NET Core(即跨平台)下运行。但是,在撰写本文时,Dotfuscator本身仅运行在经典的基于Windows的.NET Framework上。

看起来您已将Dotfuscator Professional集成到the recommended way的构建中,该构建器使用Dotfuscator的MSBuild目标和任务。说明包括将此<Import>添加到您的项目文件中:

<Import Project="$(MSBuildExtensionsPath)\PreEmptive\Dotfuscator\4\PreEmptive.Dotfuscator.Common.targets"/>

当我为.NET Core项目执行此操作时,我可以使用Visual Studio或msbuild /t:Publish /p:Configuration=Release构建并获得受保护的应用程序。但如果我试图运行dotnet build MyApp.csprojdotnet publish MyApp.csproj,则构建失败。我收到的错误信息与您最初的错误相同:

错误MSB4019:找不到导入的项目“C:\ Program Files \ dotnet \ sdk \ 2.1.503 \ PreEmptive \ Dotfuscator \ 4 \ PreEmptive.Dotfuscator.Common.targets”。确认声明中的路径是否正确,以及该文件是否存在于磁盘上。

这是因为Dotfuscator不会将其MSBuild目标安装到.NET Core位置,只安装.NET Framework和Visual Studio位置,因此上面的<Import>找不到所需的文件。

如果我将MSBuild文件从C:\Program Files (x86)\MSBuild复制到我自己的位置,例如C:\DotfuscatorMSBuildCopy,并相应地更改<Import>

<Import Project="C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\4\PreEmptive.Dotfuscator.Common.targets"/>

然后我看到你的错误:

错误MSB4062:无法从程序集C:\ DotfuscatorMSBuildCopy \ PreEmptive \ Dotfuscator \ 4 \ PreEmptive.Dotfuscator.Internal.Tasks.dll加载“FindProjectAssemblies”任务。无法加载文件或程序集'Microsoft.Build.Utilities.v4.0,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。该系统找不到指定的文件。确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类。

解决方案是使用msbuild /t:Publish /p:Configuration=Release而不是dotnet构建。

(注意:我为Dotfuscator团队工作,并且正在回答这个问题。)

© www.soinside.com 2019 - 2024. All rights reserved.