我正在使用Xamarin.Forms开发跨平台应用程序,并且在Xamarin.Android项目中使用dotfuscator时遇到问题。这是我的开发环境:
- 视窗 10 专业版
- Visual Studio Professional 2017(版本 15.9.22(
- 多特弗斯卡托社区 5.44
安卓项目:
- 应用:
- 使用安卓版本编译:安卓9.0(Pie(
- 安卓清单:
- 最低安卓版本:安卓 5.0(API 级别 21 - 棒棒糖(
- 目标安卓版本:安卓9.0(API级别28 - Pie(
- Xamarin.Forms 4.6
我正在遵循本指南:将Dotfuscator的保护集成到Visual Studio中的Xamarin应用程序中
导入目标文件
在"导入目标文件"步骤中,我必须添加一个带有目标文件相对路径的<Import>
标记。当我打开项目文件时,我可以看到标签已经存在:
<Import Project="$(MSBuildExtensionsPath)XamarinAndroidXamarin.Android.CSharp.targets" />
我检查了该文件是否存在于此路径中:C:Program Files (x86)Microsoft Visual Studio2017ProfessionalMSBuildXamarinAndroidXamarin.Android.CSharp.targets
.我没有更改此标签,因为我认为这是一个正确的配置。
设置 MSBuild 属性
在"设置 MSBuild 属性"步骤中,我添加了一个<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 Studio2017ProfessionalCommon7IDEExtensionsPreEmptiveSolutionsDotfuscatorCEdotfuscatorCLI.exe</DotfuscatorXamarinCliPath>
<DotfuscatorXamarinGenerateNewConfigFile>true</DotfuscatorXamarinGenerateNewConfigFile>
<!-- Enable Dotfuscator for Release -->
<DotfuscatorXamarinEnabled Condition="'$(Configuration)' == 'Release'">true</DotfuscatorXamarinEnabled>
</PropertyGroup>
...
将 Dotfuscator 配置文件添加到项目
在将 Dotfuscator 配置文件添加到项目步骤中,我在最后一个<ItemGroup>
标签之后添加了这个<ItemGroup>
标签:
...
</ItemGroup>
<ItemGroup>
<None Include="DotfuscatorConfig.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)XamarinAndroidXamarin.Android.CSharp.targets" />
</Project>
完成这 3 个步骤后,我保存了项目文件,在编辑器中将其关闭并重新加载了项目。然后,我选择了 Android 项目作为启动项目,并在配置组合框中选择了发布。之后,我构建了项目,这是输出:
2> MyApp.Android -> C:..MyAppMyApp.AndroidbinReleaseMyApp.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.
没有关于使用 Dotfuscator 保护构建项目的第 5 步中描述的行:
2> Running Dotfuscator with a new config file based on project references...
2> Finished running Dotfuscator with a new config file.
2>C:codeprotected-bugsweeperBugSweeperBugSweeper.AndroidBugSweeper.Android.csproj : warning : A new Dotfuscator config file was generated because it did not exist: 'DotfuscatorConfig.xml'.
并且DotfuscatorConfig.xml
文件未创建。
我做错了什么?
您在"导入目标文件">中提到的<Import>
标记与说明告诉您添加的标记不同。换句话说,在完成编辑时,项目文件中应该有多个<Import>
标签。
你提到的标记是普通 Xamarin 项目文件的一部分,与 Dotfuscator 无关。它指的是已经是Visual Studio安装的一部分的.targets
文件。请不要删除或修改此标签。
说明告诉您添加的标记是将 Dotfuscator 导入到项目中的标记。它是指您在前面的步骤中下载的PreEmptive.Dotfuscator.Xamarin.targets
文件。例如,如果您将 ZIP 文件的内容提取到与.csproj
相同的目录中,则添加:
<Import Project="PreEmptive.Dotfuscator.Xamarin.targets" />
紧接在结束</Project>
标记之前。如果将 ZIP 内容提取到其他目录中,则将"
标记之间的部分更改为从.csproj
目录到文件的相对路径。
(注意:我是Dotfuscator的开发人员,并以这种身份回答这个问题。