我无法在 Xamarin.Android 项目中启用 dotfuscator
I can`t enable dotfuscator in Xamarin.Android porject
我正在使用 Xamarin.Forms 开发跨平台应用程序,但在我的 Xamarin.Android 项目中使用 dotfuscator 时遇到问题。这是我的开发环境:
- Windows 10 专业版
- Visual Studio专业版 2017(版本 15.9.22)
- Dotfuscator 社区 5.44
Android 项目:
- 申请:
- 编译使用 Android 版本:Android 9.0 (Pie)
- Android 清单:
- 最低 Android 版本:Android 5.0(API 21 级 - Lollipop)
- 目标 Android 版本:Android 9.0(API 28 级 - 饼图)
- Xamarin.Forms 4.6
我正在遵循此指南:Integrating Dotfuscator's Protection into Your Xamarin Apps in Visual Studio
导入目标文件
在 Import the Targets File 步骤中,我必须添加一个带有目标文件相对路径的 <Import>
标记。当我打开项目文件时,我可以看到标签已经存在:
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
我检查过此路径中是否存在该文件:C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild\Xamarin\Android\Xamarin.Android.CSharp.targets
。我没有更改这个标签,因为我认为这是一个正确的配置。
设置 MSBuild 属性
在 Set MSBuild Properties 步骤中我添加了一个 <PropertyGroup>
标签。我将它添加为 <Project>
根节点的第一个节点。
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
<DotfuscatorXamarinCliPath>C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>
<DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>
<!-- Enable Dotfuscator for Release -->
<DotfuscatorXamarinEnabled Condition="'$(Configuration)' == 'Release'">true</DotfuscatorXamarinEnabled>
</PropertyGroup>
...
将 Dotfuscator 配置文件添加到项目
在 Add Dotfuscator Config File to Project 步骤中,我添加了这个 <ItemGroup>
标签,在最后一个 <ItemGroup>
标签之后:
...
</ItemGroup>
<ItemGroup>
<None Include="DotfuscatorConfig.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
</Project>
在这 3 个步骤之后,我保存了项目文件,在编辑器中将其关闭并重新加载了项目。然后,我选择 Android 项目作为 StartUp 项目,并在配置组合框中选择 Release。之后我构建了项目,这是输出:
2> MyApp.Android -> C:\..\MyApp\MyApp.Android\bin\Release\MyApp.Android.dll
2> No way to resolve conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e". Choosing "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" arbitrarily.
关于 Build the Project with Dotfuscator's Protection 第 5 步中描述的行:
2> Running Dotfuscator with a new config file based on project references...
2> Finished running Dotfuscator with a new config file.
2>C:\code\protected-bugsweeper\BugSweeper\BugSweeper.Android\BugSweeper.Android.csproj : warning : A new Dotfuscator config file was generated because it did not exist: 'DotfuscatorConfig.xml'.
并且 DotfuscatorConfig.xml
文件未创建。
我做错了什么?
您在 导入目标文件 中提到的 <Import>
标签与说明告诉您添加的标签不同。换句话说,当您完成编辑时,您的项目文件中应该有 多个 <Import>
标签。
您提到的标签是普通 Xamarin 项目文件的一部分,与 Dotfuscator 无关。它指的是 .targets
文件,该文件已经是 Visual Studio 安装的一部分。请不要删除或修改此标签。
说明中告诉您添加的标记是将 Dotfuscator 导入您的项目的标记。它指的是您在 an earlier step 中下载的 PreEmptive.Dotfuscator.Xamarin.targets
文件。例如,如果您将 ZIP 文件的内容解压缩到与 .csproj
相同的目录中,则添加:
<Import Project="PreEmptive.Dotfuscator.Xamarin.targets" />
紧接在结束 </Project>
标记之前。如果您将 ZIP 内容解压缩到其他目录,则将 "
标记之间的部分更改为从 .csproj
目录到文件的相对路径。
(注意:我是 Dotfuscator 的开发人员,我以该身份回答这个问题。)
我正在使用 Xamarin.Forms 开发跨平台应用程序,但在我的 Xamarin.Android 项目中使用 dotfuscator 时遇到问题。这是我的开发环境:
- Windows 10 专业版
- Visual Studio专业版 2017(版本 15.9.22)
- Dotfuscator 社区 5.44
Android 项目:
- 申请:
- 编译使用 Android 版本:Android 9.0 (Pie)
- Android 清单:
- 最低 Android 版本:Android 5.0(API 21 级 - Lollipop)
- 目标 Android 版本:Android 9.0(API 28 级 - 饼图)
- Xamarin.Forms 4.6
我正在遵循此指南:Integrating Dotfuscator's Protection into Your Xamarin Apps in Visual Studio
导入目标文件
在 Import the Targets File 步骤中,我必须添加一个带有目标文件相对路径的 <Import>
标记。当我打开项目文件时,我可以看到标签已经存在:
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
我检查过此路径中是否存在该文件:C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild\Xamarin\Android\Xamarin.Android.CSharp.targets
。我没有更改这个标签,因为我认为这是一个正确的配置。
设置 MSBuild 属性
在 Set MSBuild Properties 步骤中我添加了一个 <PropertyGroup>
标签。我将它添加为 <Project>
根节点的第一个节点。
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DotfuscatorXamarinConfigFileName>DotfuscatorConfig.xml</DotfuscatorXamarinConfigFileName>
<DotfuscatorXamarinCliPath>C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscatorCLI.exe</DotfuscatorXamarinCliPath>
<DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>
<!-- Enable Dotfuscator for Release -->
<DotfuscatorXamarinEnabled Condition="'$(Configuration)' == 'Release'">true</DotfuscatorXamarinEnabled>
</PropertyGroup>
...
将 Dotfuscator 配置文件添加到项目
在 Add Dotfuscator Config File to Project 步骤中,我添加了这个 <ItemGroup>
标签,在最后一个 <ItemGroup>
标签之后:
...
</ItemGroup>
<ItemGroup>
<None Include="DotfuscatorConfig.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
</Project>
在这 3 个步骤之后,我保存了项目文件,在编辑器中将其关闭并重新加载了项目。然后,我选择 Android 项目作为 StartUp 项目,并在配置组合框中选择 Release。之后我构建了项目,这是输出:
2> MyApp.Android -> C:\..\MyApp\MyApp.Android\bin\Release\MyApp.Android.dll
2> No way to resolve conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e". Choosing "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" arbitrarily.
关于 Build the Project with Dotfuscator's Protection 第 5 步中描述的行:
2> Running Dotfuscator with a new config file based on project references...
2> Finished running Dotfuscator with a new config file.
2>C:\code\protected-bugsweeper\BugSweeper\BugSweeper.Android\BugSweeper.Android.csproj : warning : A new Dotfuscator config file was generated because it did not exist: 'DotfuscatorConfig.xml'.
并且 DotfuscatorConfig.xml
文件未创建。
我做错了什么?
您在 导入目标文件 中提到的 <Import>
标签与说明告诉您添加的标签不同。换句话说,当您完成编辑时,您的项目文件中应该有 多个 <Import>
标签。
您提到的标签是普通 Xamarin 项目文件的一部分,与 Dotfuscator 无关。它指的是 .targets
文件,该文件已经是 Visual Studio 安装的一部分。请不要删除或修改此标签。
说明中告诉您添加的标记是将 Dotfuscator 导入您的项目的标记。它指的是您在 an earlier step 中下载的 PreEmptive.Dotfuscator.Xamarin.targets
文件。例如,如果您将 ZIP 文件的内容解压缩到与 .csproj
相同的目录中,则添加:
<Import Project="PreEmptive.Dotfuscator.Xamarin.targets" />
紧接在结束 </Project>
标记之前。如果您将 ZIP 内容解压缩到其他目录,则将 "
标记之间的部分更改为从 .csproj
目录到文件的相对路径。
(注意:我是 Dotfuscator 的开发人员,我以该身份回答这个问题。)