Dotfuscator在Xamarin.Android项目上抛出错误

时间:2017-10-03 00:26:48

标签: xamarin.android dotfuscator

我按照步骤将Dotfuscator集成到我的Xamarin.Android项目中,如here所述,但是当它构建项目的时候,我收到以下错误:

  

" _DotfuscatorXamarin_DetermineDefaultInputsTask"任务意外失败。   2> \ path \ to \ PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:System.NullReferenceException:对象引用未设置为对象的实例。   2> \ path \ to \ PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:位于\ path \ to \ AppData \ Local \ Temp \ eruovv3u.0.cs中的InlineCode._DotfuscatorXamarin_DetermineDefaultInputsTask.Execute():行106   2> \ path \ to \ PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()   2> \ path \ to \ PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:at Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()

我看过网上看过,但似乎没有人有这个问题。我认为问题与在第一次构建时生成默认配置文件有关。有什么想法吗?

4 个答案:

答案 0 :(得分:11)

更新:此问题已在较新版本的Dotfuscator中修复。请参阅免费Dotfuscator Community和商业许可Dotfuscator Professional的详细说明。原始答案如下。

完全披露:我是PreEmptive Solutions的Dotfuscator开发人员,正在回答这个问题。

你是对的,问题是目标文件(PreEmptive.Dotfuscator.Xamarin.targets)中的默认配置文件生成 - 抱歉。具体来说,构建集成试图发现项目引用,但需要经典的MSBuild项目格式,而不是.NET Standard使用的新的最小格式。

您可以按如下方式解决此问题:

  1. 在目标文件中,找到_DotfuscatorXamarinConfigTemplateLines属性并将其值(在CDATA部分内)复制到名为DotfuscatorConfig.xml的新文件(或您为DotfuscatorXamarinConfigFileName属性提供的任何值在项目文件中)与项目文件位于同一目录中。
  2. 在Visual Studio中,在要保护的配置中构建项目一次(例如, AnyCPU | Release )。它会出错,因为新的配置文件还没有任何输入程序集,但现在通过构建我们可以将这些程序集放在正确的位置以配置Dotfuscator。
  3. 打开Dotfuscator的用户界面。
    • 对于Community Edition,从Visual Studio中打开“工具”菜单,然后选择“PreEmptive Protection - Dotfuscator”。
    • 对于Professional Edition,请从“开始”菜单中运行Dotfuscator Professional Edition。
  4. 在用户界面中,文件|打开在步骤1中创建的文件。
  5. 在输入屏幕上,单击“添加输入”按钮(Community Edition中的绿色加号,专业版中的文件夹打开图标)。
  6. 浏览到项目目录,然后浏览obj\Release\DotfuscatorXamarin\dfin,然后选择要保护的程序集。
    • Release替换为您在步骤2中构建的配置的相应目录。
    • 您应该选择与解决方案中的项目对应的程序集,而不是选择属于框架的第三方和程序集。
  7. 保存配置文件。
  8. 导航到“项目属性”编辑器。
    • 在Community Edition中,转到构建设置屏幕,然后选择项目属性选项卡。
    • 在专业版中,转到设置标签,然后选择设置>项目属性屏幕。
  9. 添加以下项目属性(说明for Community Editionfor Professional Edition):
    • 属性名称InDir,值obj\Release\DotfuscatorXamarin\dfin
    • 属性名称OutDir,值obj\Release\DotfuscatorXamarin\dfout
    • 属性名称ReportDir,值DotfuscatorReports\Release
    • Release替换为您在步骤2中构建的配置的相应目录。请注意,OutDirReportDir指向的目录尚不存在于磁盘上。< / LI>
  10. 保存配置文件。
  11. 返回“输入”屏幕并选择一个输入,然后单击铅笔图标。编辑程序集的路径,从绝对路径${configdir}\${InDir}\AssemblyName.dll,用AssemblyName.dll替换程序集的实际名称和扩展名。对每个输入组件重复上述操作。
  12. 保存配置文件(并将其提交给源代码管理)。
  13. 在Visual Studio中重建项目。构建集成将使用您的配置文件,而不是尝试生成新的。

答案 1 :(得分:2)

在Joe出色的解决方案之上,根据https://www.preemptive.com/dotfuscator/pro/userguide/en/getting_started_xamarin.html#pctoc-setup上的说明,我最终将一个值从true更改为false 以获得我的android解决方案来构建/运行。

    <DotfuscatorXamarinGenerateNewConfigFile>false</DotfuscatorXamarinGenerateNewConfigFile>

答案 2 :(得分:0)

有时我在项目的根目录中缺少文件 PreEmptive.Dotfuscator.Xamarin.targets 。我已经执行了Joe Sewell所描述的上述说明,但是后来注意到丢失的文件。

错误是这样的:

    Error       The "_DotfuscatorXamarin_DetermineDefaultInputsTask" task failed unexpectedly.
System.NullReferenceException: Object reference not set to an instance of an object.
   at InlineCode._DotfuscatorXamarin_DetermineD  efaultInputsTask.Execute() in c:\Users\hieta\AppData\Local\Temp\k3a5f2bj.0.cs:line 106
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() WorkSafe.Droid      

仅供参考,如果有其他人可以避免浪费时间。

答案 3 :(得分:-1)

我根据this user guide在Xamarin.Android项目中配置了Dotfuscator社区版。而且我也有以下构建错误(与@AxiomaticNexus非常相似):

    Error       The "_DotfuscatorXamarin_DetermineDefaultInputsTask" task failed unexpectedly.
System.NullReferenceException: Object reference not set to an instance of an object.
   at InlineCode._DotfuscatorXamarin_DetermineDefaultInputsTask.Execute() in c:\Users\user\AppData\Local\Temp\wqhfhbsk.0.cs:line 106
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() eKey.Droid  C:\VSProjects\dotFuscatorTest\PreEmptive.Dotfuscator.Xamarin.targets    570

我已经使用@Joe Sewell的完全披露解决了这个问题。 我希望 PreEmptive Solutions 将尽快推出固定版本!