How does the C# compiler decide to emit retargetable assembly references?

僤鯓⒐⒋嵵緔 提交于 2019-12-04 02:08:54

For the assembly itself, it's an assembly flag, ie [assembly: AssemblyFlags(AssemblyNameFlags.Retargetable)].

Make note that this flag is meaningless outside of platform assemblies - custom assemblies cannot be retargetable.

For references, it's copied as part of the name from the assembly being referenced.

Not sure if this will help, but the following file was auto-generated and included in the build.

using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(
   ".NETPortable,Version=v4.0,Profile=Profile4", 
   FrameworkDisplayName = ".NET Portable Subset")]

This might hint to the compiler to do some magic.

Edit:

I think above makes a library portable. From the command line I can see /nostdlib+ is used, and a portable mscorlib.dll is referenced (which I assume has the same attribute as mentioned above).

"...\Program Files\Reference Assemblies\Microsoft\Framework.NETPortable\v4.0\Profile\Profile4\mscorlib.dll"

I've noticed by experimenting that the C# compiler would make an reference compiler as retargetable if the referenced assembly is marked as retargetable (a modifier on the .assembly section in MSIL). I did not find how the compiler decides to make the assembly retargetable, yet.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!