我按照步骤将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()
我看过网上看过,但似乎没有人有这个问题。我认为问题与在第一次构建时生成默认配置文件有关。有什么想法吗?
答案 0 :(得分:11)
更新:此问题已在较新版本的Dotfuscator中修复。请参阅免费Dotfuscator Community和商业许可Dotfuscator Professional的详细说明。原始答案如下。
完全披露:我是PreEmptive Solutions的Dotfuscator开发人员,正在回答这个问题。
你是对的,问题是目标文件(PreEmptive.Dotfuscator.Xamarin.targets
)中的默认配置文件生成 - 抱歉。具体来说,构建集成试图发现项目引用,但需要经典的MSBuild项目格式,而不是.NET Standard使用的新的最小格式。
您可以按如下方式解决此问题:
_DotfuscatorXamarinConfigTemplateLines
属性并将其值(在CDATA部分内)复制到名为DotfuscatorConfig.xml
的新文件(或您为DotfuscatorXamarinConfigFileName
属性提供的任何值在项目文件中)与项目文件位于同一目录中。obj\Release\DotfuscatorXamarin\dfin
,然后选择要保护的程序集。
Release
替换为您在步骤2中构建的配置的相应目录。InDir
,值obj\Release\DotfuscatorXamarin\dfin
OutDir
,值obj\Release\DotfuscatorXamarin\dfout
ReportDir
,值DotfuscatorReports\Release
Release
替换为您在步骤2中构建的配置的相应目录。请注意,OutDir
和ReportDir
指向的目录尚不存在于磁盘上。< / LI>
${configdir}\${InDir}\AssemblyName.dll
,用AssemblyName.dll
替换程序集的实际名称和扩展名。对每个输入组件重复上述操作。答案 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 将尽快推出固定版本!