我的应用程序需要使用由政府机构独立验证的dll(也由我编写)。我们计划很少修改DLL,因为需要重新验证。我想防止对我的应用程序拾取的这个dll进行无意的修改。有没有办法为DLL创建一个哈希码,并设置我的应用程序只使用这个特定的版本。强制我的应用程序使用特定版本的DLL
这样,如果有人修改了dll的一些代码,当我们构建并运行应用程序时,应用程序将无法加载dll(因为它已经更改)。
任何意见/建议?
干杯,
詹姆斯
我的应用程序需要使用由政府机构独立验证的dll(也由我编写)。我们计划很少修改DLL,因为需要重新验证。我想防止对我的应用程序拾取的这个dll进行无意的修改。有没有办法为DLL创建一个哈希码,并设置我的应用程序只使用这个特定的版本。强制我的应用程序使用特定版本的DLL
这样,如果有人修改了dll的一些代码,当我们构建并运行应用程序时,应用程序将无法加载dll(因为它已经更改)。
任何意见/建议?
干杯,
詹姆斯
使用强名称做部分的这一点,并阻止其他人使用你的装配篡改,但不会阻止你偶然做它,然后辞职。
我们使用独立的流程来启动我们的主应用程序。在启动主应用程序之前,启动应用程序MD5的所有assmeblies并将它们与它期望看到的列表进行比较,如果发生了某些变化,MD5会失败,并且主应用程序未加载。
如果您确实需要编译时检查,那么您可能会编写一个预生成步骤,执行相同的MD5比较,如果发生更改,则生成失败。
我知道,如果你点击你的项目一个DLL参考,你可以在它的属性中选择“特定版本”,并将其设置为True,将在没有做什么你在之后?
菲尔
由于科林提到强命名你的程序集将是关键,因为这包括版本&签署大会。下面的几个博客帖子可以帮助你具有很强的命名&版本:
http://www.csharp411.com/net-assembly-faq-part-3-strong-names-and-signing/(可能也值得一读的这个关于全局程序集缓存下一部分)
http://philippetruche.wordpress.com/2008/08/12/net-assembly-versioning-lifecycle/
这将工作提供版本号在构建新版本的程序集时增加。如果你控制你的版本号,以便它们没有唯一的内部版本号,这将不会为你提供足够的保护,因为不止一个版本号可以有相同的版本号(不好的做法,但它会发生)。 – 2009-05-21 09:35:18