C# 如何在c中动态加载已签名程序集#

C# 如何在c中动态加载已签名程序集#,c#,.net,C#,.net,我收到异常消息说“无法加载程序集” 请在此帮助我。请参阅加载组件的文档。尝试将程序集路径作为此方法的参数,它将按照文档中的示例工作。 为了检查程序集的真实性,您可以执行以下操作: Assembly myDll = Assembly.LoadFrom("D:\\ClassLib.dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=173d654960d26d29");

我收到异常消息说“无法加载程序集” 请在此帮助我。

请参阅加载组件的文档。尝试将程序集路径作为此方法的参数,它将按照文档中的示例工作。 为了检查程序集的真实性,您可以执行以下操作:

Assembly myDll = Assembly.LoadFrom("D:\\ClassLib.dll, Version=1.0.0.0, 
                                   Culture=neutral, PublicKeyToken=173d654960d26d29");

事实上,一旦加载了程序集,程序集对象中就有了大多数属性,如版本号等。

您可以按如下方式加载程序集

    string filePath = "C:/path/to/file.dll";
    Assembly assembly = Assembly.LoadFrom(filePath);
    Module module = assembly.GetModules().First();
    X509Certificate certificate = module.GetSignerCertificate();
    if (certificate == null)
    {
         // file is not signed.
    }
更多来源

基于MSDN网站,有更好的方法检查有效性

  • 将这两行代码粘贴到相关类的顶部
  • 加载程序集
  • 根据您的需要设置最后2个参数并调用函数。

  • 注意:据我所知,此版本没有托管版本。因此,在使用此函数时,请确保线程安全

    可以这样尝试:
    Assembly.LoadFrom(“D:\\ClassLib.dll”)
    在这种情况下,签名程序集或未签名程序集没有任何区别。我想加载具有完全限定路径(带pulickeytoken)的程序集,以确保它未被篡改。@Yaswanth请参考此内容并参阅
    方法2:使用带有标记的应用程序配置(.config)文件
    签名的程序集或未签名的程序集在这种情况下没有任何区别。我想使用完全限定路径(使用pulickeytoken)加载程序集,以确保它未被篡改。仅指定程序集名称无法确保加载正确的程序集,对吗?如果有人篡改了它或其他具有相同名称但没有签名的程序集,即使在这种情况下我加载时没有任何问题,也不应该是这样。如果我们与PublicKeyToken一起加载,那么我们可以确保加载的库是正确的。如果我错了,请更正。一旦我加载程序集,我可以检查公钥和版本号详细信息。最后我不得不妥协。字符串pathToDll=“D:\\ClassLib.dll”;Assembly myDll=Assembly.LoadFrom(“D:\\ClassLib.dll”);如果(myDll.FullName==“ClassLib,Version=1.0.0,Culture=neutral,PublicKeyToken=173d65490d26d29”){//do your job}否则抛出新的FileNotFoundException();无论如何,谢谢你们的时间和帮助:-)
    string path = @"D:\ClassLib.dll";
    Assembly assembly = Assembly.LoadFrom(path);
    
    [DllImport("mscoree.dll", CharSet = CharSet.Unicode)]
    static extern bool StrongNameSignatureVerificationEx(string wszFilePath, bool fForceVerification, ref bool pfWasVerified);
    
    var filePath = "C:/whatever.dll";
    var assembly = Assembly.LoadFrom(filePath);
    
    var alertMessage = "Spoofed!";
    var isValid = StrongNameSignatureVerificationEx(filePath, ....);
    if (!isValid)
        throw new FileNotFoundException(alertMessage, filePath);