如果您曾经使用过Reflector,您可能会注意到C#编译器会生成类型,方法,字段和局部变量,这些变量值得调试器"特殊"显示.例如,以"CS $"开头的局部变量不会显示给用户.匿名方法的闭包类型,自动属性的后备字段等还有其他特殊的命名约定.
我的问题:在哪里可以了解这些命名约定?有谁知道一些文件?
我的目标是使PostSharp 2.0使用相同的约定.
.NET Compact Framework引入了可重定向的程序集引用,现在用于支持可移植类库.
基本上,编译器会发出以下MSIL:
.assembly extern retargetable mscorlib
{
.publickeytoken = (7C EC 85 D7 BE A7 79 8E )
.ver 2:0:5:0
}
Run Code Online (Sandbox Code Playgroud)
C#编译器如何理解它必须发出一个可重定向的引用,以及如何强制C#编译器甚至在可移植类库之外发出这样的引用?
<bindingRedirect />
在完整的.NET Framework之外是否受支持?例如,普通的.NET应用程序(在app.config
或中web.config
)支持以下内容:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="PostSharp" publicKeyToken="b13fd38b8f9c99d7" culture="neutral" />
<bindingRedirect oldVersion="3.0.0.0-3.1.1.1" newVersion="3.1.1.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如果不支持,间接装配参考的问题如何解决?也就是说,如果组件A引用组件B和C,而B引用D v1.0,C到D v1.1,如果我们只运送D v1.1,我们如何确保B找到它的依赖关系?
我有一个透明代理,例如由WCF生成的代理:
ChannelFactory<ICalculator> channelFactory =
new ChannelFactory<ICalculator>(
new NetNamedPipeBinding(),
"net.pipe://localhost/WcfTransparentProxy/Calculator" );
ICalculator calculator = channelFactory.CreateChannel();
Run Code Online (Sandbox Code Playgroud)
如何从透明代理获取RealProxy?