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 и отвечаю в этом качестве. )