当构建试图使用dotfuscator的.net核心应用程序时,我们可以使用msbuild.exe成功构建和混淆,但是使用.net核心cli进行的任何构建或发布都会失败。
使用本地命令行以及在我们的devops构建管道中都存在这些问题。
示例
msbuild.exe "the project file.csproj“<- -此操作并使用dotfuscator
dotnet构建“项目file.csproj”<- -这会引发下面的错误。
dotnet发布"the project file.csproj“<-还引发下面的错误。
D:\Repos\PF\tools\dotfuscator\PreEmptive.Dotfuscator.Common.targets(262,5):error MSB4062:无法从程序集D:\Repos\PF\tools\dotfuscator\PreEmptive.Dotfuscator.Internal.Tasks.dll.加载"FindProjectAssemblies“任务无法加载文件或程序集“Microsoft.Build.Uicities.v4.0,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f7f11d50a3a”。系统找不到指定的文件。确认声明是正确的,程序集及其所有依赖项都可用,任务包含实现Microsoft.Build.Framework.ITask的公共类。D:\Repos\PF\source\xxxxx.xxxxx.xxxxx.API\xxxxx.xxxxxx.xxxxxx.API.csproj
发布于 2019-01-23 21:18:30
更新(2019-12-20):我们发布了6.0.0的测试版,支持在非Windows操作系统上运行6.0.0的测试版。这包括对dotnet命令的支持。
Dotfuscator可以保护.NET核心程序集,然后这些程序集可以在.NET核心(即跨平台)下运行。然而,在本文撰写之时,Dotfuscator本身只运行在经典的、基于Windows的.NET框架上。
看起来您已经在推荐的方法中将Dotfuscator集成到您的构建中了,它使用了Dotfuscator的MSBuild目标和任务。说明包括将此<Import>添加到项目文件中:
<Import Project="$(MSBuildExtensionsPath)\PreEmptive\Dotfuscator\4\PreEmptive.Dotfuscator.Common.targets"/>当我为一个.NET核心项目这样做时,我可以在Visual或通过msbuild /t:Publish /p:Configuration=Release构建并获得一个受保护的应用程序。但是如果我试图运行dotnet build MyApp.csproj或dotnet publish MyApp.csproj,构建就失败了。一开始我收到的错误信息和你不一样:
error MSB4019:未找到导入的项目"C:\Program“。确认声明中的路径是正确的,并且文件存在于磁盘上。
这是因为Dotfuscator没有将其MSBuild目标安装到.NET核心位置,只有.NET框架和Visual位置,因此上面的<Import>找不到所需的文件。
如果我将MSBuild文件从C:\Program Files (x86)\MSBuild复制到自己的位置(如C:\DotfuscatorMSBuildCopy ),并相应地更改<Import>:
<Import Project="C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\4\PreEmptive.Dotfuscator.Common.targets"/>然后我看到你的错误:
错误MSB4062:无法从程序集MSB4062加载"FindProjectAssemblies“任务无法加载文件或程序集“Microsoft.Build.Uicities.v4.0,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f7f11d50a3a”。系统找不到指定的文件。确认声明是正确的,程序集及其所有依赖项都可用,任务包含实现Microsoft.Build.Framework.ITask的公共类。
解决方案是使用msbuild /t:Publish /p:Configuration=Release而不是dotnet进行构建。
(注:我为Dotfuscator团队工作,并以该身份回答。)
https://stackoverflow.com/questions/54243003
复制相似问题