我正在使用NRefactory尝试解析.csproj文件中列出的所有编译文件,并希望能够解析项目中的所有类型。
我不能在不添加.csproj也包含的程序集引用的情况下解析所有类型,这就是我正在努力解决的问题。
摘自.csproj:
<ItemGroup>
<Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
<Reference Include="Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86" />
<Reference Include="mscorlib" />
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
</ItemGroup>可以看到,XNA参考给出了一个全名,所以我可以很容易地使用Type.GetType("fullname").Assembly获得它们的程序集。但是在不带公钥的情况下传入System或mscorlib将返回null。
如何仅从单词System和.csproj文件中的其他信息获取System的完整类型名称?
发布于 2012-10-15 07:55:57
您实际上想要加载哪个System.dll副本?一个在运行时可用的?还是C#编译器使用的那个?
如果项目以.NET 4.0为目标,则C#编译器将使用与针对.NET 4.5的项目不同的引用程序集。但是,在运行时,两者都使用相同的程序集(因为.NET 4.5安装会覆盖.NET 4.0)。
要获得与C#编译器使用的版本相同的版本,最好的解决方案是要求MSBuild (通过Microsoft.Build.dll)解析程序集引用。NRefactory CodeProject article上的示例应用程序使用这种方法,您可以随意复制其中的代码。
一般来说,获取正确的运行时程序集是不可能的,因为应用程序可以重新配置程序集的加载方式(app.config或AppDomain.AssemblyResolve事件处理程序)。
https://stackoverflow.com/questions/12881989
复制相似问题