dotfuscator с «сборкой dotnet» или «публикацией dotnet» - не удалось загрузить задачу «FindProjectAssemblies» PreEmptive.Dotfuscator.Internal.Tasks.dll - PullRequest
0 голосов
/ 17 января 2019

При создании основного приложения .net, которое пытается использовать dotfuscator, мы можем успешно создавать и запутывать файлы, используя msbuild.exe, однако любая сборка или публикация с использованием .net core cli завершается неудачей.

Эти проблемы существуют с использованием локальной командной строки, а также в наших конвейерах сборки devops.

примеры

msbuild.exe "файл проекта.csproj" <- это работает и включает dotfuscator </p>

dotnet build "файл проекта.csproj" <- выдает ошибку ниже. </p>

dotnet публикует «файл проекта.csproj» <- также выдает ошибку ниже. </p>

D: \ Repos \ PF \ tools \ dotfuscator \ PreEmptive.Dotfuscator.Common.targets (262,5): ошибка MSB4062: не удалось загрузить задачу «FindProjectAssemblies» из сборки D: \ Repos \ PF \ tools \ Dotfuscator \ PreEmptive.Dotfuscator.Internal.Tasks.dll. Не удалось загрузить файл или сборку «Microsoft.Build.Utilities.v4.0, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a». Система не может найти указанный файл. Убедитесь, что объявление правильное, что сборка и все ее зависимости доступны и что задача содержит открытый класс, реализующий Microsoft.Build.Framework.ITask. [D: \ Repos \ PF \ источник \ xxxxx.xxxxx.xxxxx.API \ xxxxx.xxxxxx.xxxxxx.API.csproj]

Очень похоже на эту проблему. https://github.com/Microsoft/msbuild/issues/2111

1 Ответ

0 голосов
/ 24 января 2019

Dotfuscator может защищать сборки .NET Core, которые затем можно запускать в .NET Core (то есть, кроссплатформенно).Однако на момент написания этой статьи сам Dotfuscator работает только на классической платформе .NET Framework на базе Windows.

Похоже, вы интегрировали Dotfuscator Professional в свою сборку в .рекомендуемый способ , в котором используются цели и задачи MSBuild от Dotfuscator.Инструкции включают добавление этого <Import> в файл вашего проекта:

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

Когда я делал это для проекта .NET Core, я мог встроиться в Visual Studio или через msbuild /t:Publish /p:Configuration=Release и получить защищенное приложение.Но если я попытался запустить dotnet build MyApp.csproj или dotnet 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: не удалось загрузить задачу «FindProjectAssemblies» из сборки C: \ DotfuscatorMSBuildCopy \ PreEmptive \Dotfuscator \ 4 \ PreEmptive.Dotfuscator.Internal.Tasks.dll.Не удалось загрузить файл или сборку «Microsoft.Build.Utilities.v4.0, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a».Система не может найти указанный файл.Убедитесь, что объявление правильное, что сборка и все ее зависимости доступны и что задача содержит открытый класс, который реализует Microsoft.Build.Framework.ITask.

Решение заключается в сборке с использованиемmsbuild /t:Publish /p:Configuration=Release вместо dotnet.

( Примечание: я работаю в команде Dotfuscator и отвечаю в этом качестве. )

...