Как реализовать Dotfuscator в проекте .NET Standard 2.0?

Я занимаюсь обновлением существующего приложения Xamarin с PCL на .NET Standard 2.0. У меня есть несколько подпроектов, таких как бизнес, данные, BDO и т. д., которые были PCL, я смог обновить их до .NET Standard 2.0, используя это руководство.

Однако я реализовал Dotufscator во всех своих проектах PCL, используя реализацию этого блога Xamarin. , но она не работает как инструкция для проектов .NET Standard 2.0. Библиотека DLL не запутана, и сообщение «Работает Dotfuscator» не отображается в выходных данных сборки.

Моя текущая попытка добавить Dotufcator в файл проекта .NET Standard 2.0 выглядит следующим образом:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <DotfuscatorXamarinCliPath>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>
    <DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
    <DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <OutputPath>bin\Debug\</OutputPath>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DotfuscatorXamarinEnabled>true</DotfuscatorXamarinEnabled>
    <OutputPath>bin\Release\</OutputPath>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
  </ItemGroup>
  <ItemGroup>
    <None Include="DotfuscatorConfig.xml" />
  </ItemGroup>

  <Import Project="..\PreEmptive.Dotfuscator.Xamarin.targets" />
</Project>

Кто-нибудь сможет помочь? Спасибо


person user2078938    schedule 20.08.2018    source источник


Ответы (1)


В качестве отказа от ответственности я должен упомянуть, что отвечаю на этот пост как часть своей работы разработчика и технического писателя в команде Dotfuscator. Я также написал сообщение в блоге, на которое вы ссылаетесь, так что я рад вы нашли его полезным для защиты своего приложения Xamarin.

Во-первых, в сообщении в блоге есть двусмысленность, которую я должен прояснить. Показанная здесь интеграция Dotfuscator-Xamarin MSBuild предназначена только для интеграции в проекты Xamarin для конкретной платформы, которые создаются в упакованном формате, например проект Android, который создает APK. Непосредственная интеграция в библиотечные проекты, такие как переносимые библиотеки классов (PCL) или стандартные библиотеки .NET, не поддерживается.

Обратите внимание, что интеграция Dotfuscator в проект Xamarin защитит все упакованные сборки, созданные из вашего решения, поэтому код вашей библиотеки по-прежнему будет защищен. Например, если вы интегрируете Dotfuscator в MyApp.Android.csproj, который ссылается на A.csproj, B.csproj и C.csproj, Dotfuscator защитит сборки всех четырех проектов, когда они будут упакованы в APK. Этот подход обеспечивает более надежную защиту и не требует запуска Dotfuscator для каждой библиотеки отдельно, что экономит время на сборку и настройку.

Если вы используете Dotfuscator Professional Edition с коммерческой лицензией, версия 4.37.0 включает новая интеграция с MSBuild. Новую интеграцию проще настроить, она устраняет некоторые известные проблемы, и в дальнейшем мы рекомендуем использовать Dotfuscator в качестве основного способа для проектов всех типов, а не только для Xamarin. Я рекомендую обновить Dotfuscator до этой версии и удалить интеграцию Dotfuscator-Xamarin MSBuild из ваших проектов .NET Standard. Затем добавьте новую интеграцию MSBuild в свои проекты Xamarin для конкретной платформы; подробности см. на странице начала работы с Xamarin нашего пользователя. Руководство.

Если вы используете Dotfuscator Community Edition (входит во все выпуски Visual Studio) или более раннюю версию Professional Edition, продолжайте использовать интеграция Dotfuscator-Xamarin MSBuild, упомянутая в сообщении блога. Я рекомендую удалить интеграцию из стандартных библиотек .NET и вместо этого добавить ее в проекты Xamarin для конкретных платформ, которые на них ссылаются. Обратите внимание, что при интеграции в проект Xamarin, который ссылается на стандартные библиотеки .NET, существует известная проблема, из-за которой первая сборка завершится сбоем (поскольку интеграция не понимает минимальный формат проекта, который использует .NET Standard); см. этот ответ для обходного пути. Последующие сборки будут выполняться нормально, без обходного пути.

person Joe Sewell    schedule 22.08.2018
comment
Извините за очень задержку с ответом, я увлекся другим проектом и забыл проверить это. Это невероятно полезно и должно полностью решить мою проблему, спасибо за подробный ответ. - person user2078938; 25.09.2018