【发布时间】:2020-09-15 11:53:56
【问题描述】:
我正在使用 Xamarin.Forms 开发跨平台应用程序,但在我的 Xamarin.Android 项目中使用 dotfuscator 时遇到问题。这是我的开发环境:
- Windows 10 专业版
- Visual Studio Professional 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 - Pie)
- 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 Studio\2017\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 Studio\2017\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项目作为启动项目,并在配置组合框中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 文件未创建。
我做错了什么?
【问题讨论】:
-
尝试清空bin和obj文件夹,重复第5步的操作。该指南意味着选择解决方案构建配置而不是发布项目。您可以查看本教程:devblogs.microsoft.com/xamarin/…
标签: visual-studio xamarin.forms xamarin.android msbuild dotfuscator