具有"dotnet build"或"dotnet publish"的dotfuscator - 无法加载"FindProjectAssemblies"任务 Preemptive.Dotfuscator



当构建尝试使用dotfuscator的.net核心应用程序时,我们可以使用msbuild.exe成功构建和模糊处理,但使用.net核心cli的任何构建或发布都会失败。

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

示例

msbuild.exe"项目文件.csproj"<-这是有效的,并参与了dotfuscator

dotnet构建"项目文件.csproj"<-这将抛出以下错误。

dotnet发布"项目文件.csproj"<-还抛出以下错误。

D: \Repos\PF\tools\dotfuscator\PreEmptive.dotfuscator.Common.targets(262,5):错误MSB4062:无法从程序集D:\Repos\PF\tooles\dotfuscatr\PreEmptive.dotfuscater.Internal.Tasks.dll加载"FindProjectAssemblys"任务。无法加载文件或程序集"Microsoft.Build.Utilities.v4.0,Version=4.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"。系统找不到指定的文件。确认声明正确,程序集及其所有依赖项都可用,并且任务包含实现Microsoft.Build.Framework.ITask的公共类。[D:\Repos\PF\source\xxxxxxxxxxxxxxx.neneneba API \xxxxxxxxxxx.xxxxxx.nenenebb API.csproj]

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

更新(2019-12-20):我们发布了Dotfuscator Professional 6.0.0的测试版,支持在非Windows操作系统上运行Dotfusscator。这包括对dotnet命令的支持。


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

看起来您已经以推荐的方式将Dotfuscator Professional集成到您的构建中,该方式使用了Dotfuscat的MSBuild目标和任务。说明包括将此<Import>添加到您的项目文件:

<Import Project="$(MSBuildExtensionsPath)PreEmptiveDotfuscator4PreEmptive.Dotfuscator.Common.targets"/>

当我为.NET Core项目做这件事时,我可以在Visual Studio中或通过msbuild /t:Publish /p:Configuration=Release进行构建,并获得一个受保护的应用程序。但是,如果我尝试运行dotnet build MyApp.csprojdotnet publish MyApp.csproj,则构建失败。一开始我收到了一条与你不同的错误消息:

error MSB4019:未找到导入的项目"C:\Program Files\dotnet\sdk\2.1.503\PreEmpitive\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:DotfuscatorMSBuildCopyPreEmptiveDotfuscator4PreEmptive.Dotfuscator.Common.targets"/>

然后我看到你的错误:

error MSB4062:无法从程序集C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\4\PreEmpitive.Dotfuscator.Internal.Tasks.dll加载"FindProjectAssemblys"任务。无法加载文件或程序集"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团队工作,并以该身份回答。)

相关内容

  • 没有找到相关文章

最新更新