引用程序集 returns None 作为 ProcessorArchitecture
Referenced assemblies returns None as ProcessorArchitecture
我有一个 Web 项目,它是我使用 Assembly.ReflectionOnlyLoadFrom(filename)
加载的 DLL。然后我打电话给 assembly.GetReferencedAssemblies();
.
返回的 AssemblyName
都将 ProcessorArchitecture
设置为 None
。
主要 DLL 的 ProcessorArchitecture 是 x64,而 AnyCPU 和 x64 之间的引用不同。
知道为什么我无法为这些引用程序集获取 ProcessorArchitecture 吗?
更新: 我刚看到这个 link 声明:
Beginning with the .NET Framework 4, this property always returns ProcessorArchitecture.None for reference assemblies.
是否有其他方式获取此信息?
我遇到了这个问题;我最终使用的代码如下所示:
static void Main() {
// Load assembly. This can either be by name, or by calling GetReferencedAssemblies().
Assembly referencedAssembly = Assembly.Load("AssemblyName");
// Get the PEKind for the assembly, and handle appropriately
PortableExecutableKinds referenceKind = GetPEKinds(referencedAssembly);
if((referenceKind & PortableExecutableKinds.Required32Bit) > 0) {
// is 32 bit assembly
}
else if((referenceKind & PortableExecutableKinds.PE32Plus) > 0) {
// is 64 bit assembly
}
else if((referenceKind & PortableExecutableKinds.ILOnly) > 0) {
// is AnyCpu
}
}
static PortableExecutableKinds GetPEKinds(Assembly assembly) {
PortableExecutableKinds peKinds;
ImageFileMachine imageFileMachine;
assembly.GetModules()[0].GetPEKind(out peKinds, out imageFileMachine);
return peKinds;
}
我有一个 Web 项目,它是我使用 Assembly.ReflectionOnlyLoadFrom(filename)
加载的 DLL。然后我打电话给 assembly.GetReferencedAssemblies();
.
返回的 AssemblyName
都将 ProcessorArchitecture
设置为 None
。
主要 DLL 的 ProcessorArchitecture 是 x64,而 AnyCPU 和 x64 之间的引用不同。
知道为什么我无法为这些引用程序集获取 ProcessorArchitecture 吗?
更新: 我刚看到这个 link 声明:
Beginning with the .NET Framework 4, this property always returns ProcessorArchitecture.None for reference assemblies.
是否有其他方式获取此信息?
我遇到了这个问题;我最终使用的代码如下所示:
static void Main() {
// Load assembly. This can either be by name, or by calling GetReferencedAssemblies().
Assembly referencedAssembly = Assembly.Load("AssemblyName");
// Get the PEKind for the assembly, and handle appropriately
PortableExecutableKinds referenceKind = GetPEKinds(referencedAssembly);
if((referenceKind & PortableExecutableKinds.Required32Bit) > 0) {
// is 32 bit assembly
}
else if((referenceKind & PortableExecutableKinds.PE32Plus) > 0) {
// is 64 bit assembly
}
else if((referenceKind & PortableExecutableKinds.ILOnly) > 0) {
// is AnyCpu
}
}
static PortableExecutableKinds GetPEKinds(Assembly assembly) {
PortableExecutableKinds peKinds;
ImageFileMachine imageFileMachine;
assembly.GetModules()[0].GetPEKind(out peKinds, out imageFileMachine);
return peKinds;
}