在Xamarin.Android项目上引发Dotfuscator错误

在Xamarin.Android项目上引发Dotfuscator错误,xamarin.android,dotfuscator,Xamarin.android,Dotfuscator,如前所述,我按照步骤将Dotfuscator集成到我的Xamarin.Android项目中,但到了构建项目的时候,我遇到了以下错误: “_DotfuscatorXamarin_determinatedFaultInputsTask”任务意外失败。 2> \path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:System.NullReferenceException:对象引用未设置为对象的实例。 2> \path\to\P

如前所述,我按照步骤将Dotfuscator集成到我的Xamarin.Android项目中,但到了构建项目的时候,我遇到了以下错误:

“_DotfuscatorXamarin_determinatedFaultInputsTask”任务意外失败。 2> \path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:System.NullReferenceException:对象引用未设置为对象的实例。 2> \path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:在内联代码处。\u Dotfuscator Xamarin\u在\path\to\AppData\Local\Temp\eruovv3u.0.cs:第106行中确定了faultinputstask.Execute() 2> \path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:位于Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ItaskeExecutionHost.Execute() 2> \path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5):错误MSB4018:位于Microsoft.Build.BackEnd.TaskBuilder.d_u26.MoveNext()


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

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


充分披露:我是先发制人解决方案公司Dotfuscator的开发人员,我以这个角色回答这个问题

没错,问题是目标文件中的默认配置文件生成(
PreEmptive.Dotfuscator.Xamarin.targets
)-很抱歉。具体地说,生成集成正在尝试发现项目引用,但需要的是经典的MSBuild项目格式,而不是.NET标准使用的新的最小格式

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

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

  • 我一直在Xamarin.Android项目中根据配置Dotfuscator社区版。我还遇到了以下构建错误(与@AxiomaticNexus非常相似):

    错误“\u DotfuscatorXamarin\u DetermineDefaultInputsTask”任务意外失败。
    System.NullReferenceException:对象引用未设置为对象的实例。
    在c:\Users\user\AppData\Local\Temp\wqhfhbsk.0.cs中的InlineCode.\u DotfuscatorXamarin\u确定了faultInputStatsk.Execute()
    位于Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ItaskeExecutionHost.Execute()
    在Microsoft.Build.BackEnd.TaskBuilder.d_u26.MoveNext()eKey.Droid C:\VSProjects\dotFuscatorTest\PreEmptive.Dotfuscator.Xamarin.targets 570
    
    我已经用@Joe Sewell的完全披露解决了这个问题。
    我希望先发制人的解决方案将尽快实现固定版本

    在某个时候,我丢失了项目根目录中的PreEmptive.Dotfuscator.Xamarin.targets文件。我已经执行了
        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
    
        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      
    
        <DotfuscatorXamarinGenerateNewConfigFile>false</DotfuscatorXamarinGenerateNewConfigFile>