gpt4 book ai didi

.net-core - dotfuscator 为 "dotnet build"或 "dotnet publish"- 无法加载 "FindProjectAssemblies"任务 PreEmptive.Dotfuscator.Internal.Tasks.dll

转载 作者:行者123 更新时间:2023-12-02 01:25:41 25 4
gpt4 key购买 nike

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

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

示例

msbuild.exe“项目文件.csproj”<-这可以工作并使用 dotfuscator

dotnet build“项目文件.csproj”<-这会引发以下错误。

dotnetpublish“项目文件.csproj”<-也会引发以下错误。

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

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

最佳答案

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

<小时/>

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 进行构建并获得 protected 应用程序。但如果我尝试运行 dotnet build MyApp.csprojdotnet publish MyApp.csproj ,构建失败。我一开始收到的错误消息与您不同:

error MSB4019: The imported project "C:\Program Files\dotnet\sdk\2.1.503\PreEmptive\Dotfuscator\4\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>上面没有找到需要的文件。

如果我改为从 C:\Program Files (x86)\MSBuild 复制 MSBuild 文件到我自己的位置,例如 C:\DotfuscatorMSBuildCopy ,然后更改 <Import>因此:

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

然后我看到你的错误:

error MSB4062: The "FindProjectAssemblies" task could not be loaded from the assembly C:\DotfuscatorMSBuildCopy\PreEmptive\Dotfuscator\4\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 团队工作,并以此身份回答问题。)

关于.net-core - dotfuscator 为 "dotnet build"或 "dotnet publish"- 无法加载 "FindProjectAssemblies"任务 PreEmptive.Dotfuscator.Internal.Tasks.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54243003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com