【发布时间】:2018-01-06 05:44:45
【问题描述】:
在 Visual Studio 中创建一个空白的 android 项目 Blank App (Android) 然后添加以下 nuget 包
NETStandard.Library 1.6.1
结构图 4.5.2
现在尝试在发布模式下编译项目。 我收到以下错误:
Using "LinkAssemblies" task from assembly "C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Build.Tasks.dll".
Task "LinkAssemblies"
LinkAssemblies Task
UseSharedRuntime: False
MainAssembly: obj\Release\linksrc\App2.dll
OutputDirectory: obj\Release\android\assets\
OptionalDestinationDirectory:
I18nAssemblies:
LinkMode: SdkOnly
LinkSkip:
LinkDescriptions:
ResolvedAssemblies:
obj\Release\linksrc\App2.dll
obj\Release\linksrc\Java.Interop.dll
obj\Release\linksrc\Mono.Android.dll
obj\Release\linksrc\System.Core.dll
obj\Release\linksrc\System.dll
obj\Release\linksrc\System.IO.Compression.dll
obj\Release\linksrc\System.Net.Http.dll
obj\Release\linksrc\System.Xml.dll
obj\Release\linksrc\mscorlib.dll
obj\Release\linksrc\StructureMap.dll
obj\Release\linksrc\System.Runtime.Loader.dll
obj\Release\linksrc\System.Runtime.dll
obj\Release\linksrc\System.ComponentModel.Composition.dll
obj\Release\linksrc\System.Threading.dll
obj\Release\linksrc\System.Collections.dll
obj\Release\linksrc\System.Collections.Concurrent.dll
obj\Release\linksrc\System.Reflection.dll
obj\Release\linksrc\System.Diagnostics.Debug.dll
obj\Release\linksrc\System.Linq.dll
obj\Release\linksrc\System.Runtime.InteropServices.dll
obj\Release\linksrc\System.Runtime.Extensions.dll
obj\Release\linksrc\System.Reflection.Extensions.dll
obj\Release\linksrc\System.Runtime.Serialization.dll
obj\Release\linksrc\System.ServiceModel.Internals.dll
obj\Release\linksrc\Mono.Security.dll
obj\Release\linksrc\System.Resources.ResourceManager.dll
obj\Release\linksrc\System.IO.dll
obj\Release\linksrc\System.Threading.Tasks.dll
obj\Release\linksrc\System.Linq.Expressions.dll
obj\Release\linksrc\System.Reflection.Emit.Lightweight.dll
obj\Release\linksrc\System.Reflection.Emit.ILGeneration.dll
obj\Release\linksrc\System.Reflection.TypeExtensions.dll
obj\Release\linksrc\System.Reflection.Primitives.dll
obj\Release\linksrc\System.Globalization.dll
obj\Release\linksrc\System.AppContext.dll
obj\Release\linksrc\System.IO.FileSystem.dll
obj\Release\linksrc\System.Console.dll
EnableProguard: False
ProguardConfiguration:
DumpDependencies: False
LinkOnlyNewerThan:
HttpClientHandlerType:
TlsProvider:
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: The "LinkAssemblies" task failed unexpectedly.
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: Mono.Linker.MarkException: Error processing method: 'System.Boolean StructureMap.Graph.AssemblyFinder/<FindAssemblies>
d__1::MoveNext()' in assembly: 'StructureMap.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Runtime.Loader.AssemblyLoadContext System.Runtime.Loader.AssemblyLoadContext::get_Default()
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.HandleUnresolvedMethod(MethodReference reference)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.MarkMethod(MethodReference reference)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.ProcessQueue()
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: --- End of inner exception stack trace ---
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.ProcessQueue()
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.Process()
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Steps.MarkStep.Process(LinkContext context)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Mono.Linker.Pipeline.Process(LinkContext context)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at MonoDroid.Tuner.Linker.Process(LinkerOptions options, LinkContext& context)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Xamarin.Android.Tasks.LinkAssemblies.Execute()
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1577,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()
Done executing task "LinkAssemblies" -- FAILED.
Done building target "_LinkAssembliesShrink" in project "App2.csproj" -- FAILED.
Build FAILED.
在调试模式下,它按预期编译,但我猜 LinkAssemblies 任务不会运行。
我正在使用 Xamarin 4.6.0.297 和 Visual Studio 2015。
这是StructureMap 或Xamarin 的问题吗?
【问题讨论】:
-
您是否尝试将链接选项更改为根本不链接?
-
@saketkumar 当我将 Linking 设置为 None 时,它会编译,Linking 有什么作用?
-
链接器有时可能非常激进,它应该从各种程序集中删除未使用的代码。但它对代码的编译时使用做出判断。因此,如果通过反射使用某些代码,则无法判断这是运行时,并且可能会删除导致您面临的问题的那部分代码。
-
如果这有助于让我知道,我会添加一些附加信息作为答案,以便在遇到链接器相关问题时可以帮助更多人。
-
将链接器更改为
None不是一个完整的解决方案,而是一种解决方法,它会增加您的应用程序大小。您应该查看链接跳过此程序集:developer.xamarin.com/guides/android/advanced_topics/linking/… 或创建自定义链接器配置:developer.xamarin.com/guides/cross-platform/advanced/…
标签: xamarin xamarin.android structuremap