我的应用程序有一个引用的程序集(test.exe,test.dll)
我想要的是当test.exe
运行时,它应该将出版商名称显示为" TestCompany"。
为此,我对它进行了数字签名,它就是我想做的。如果我改变test.exe
的一个字节,则出版商名称为"未知"。哪个好。
但是如果我改变test.dll
,应用程序就会运行,因为没有发生任何事情,并将发布者名称显示为" TestCompany"。这对我没有好处。
因此,我在test.dll
上添加了强名称,并在app.config中添加了<bypassTrustedAppStrongNames enabled="false" />
。
再次,没有区别。所以我再次搜索并发现bypassTrustedAppStrongNames
只检查程序集是否具有强名称。不是验证。这对我来说再好不过了。
我真正想要的是保护用户,而不是我的应用程序。如果用户运行我的应用程序并且它从我这里说出来,它必须来自我的每个字节。如果应用程序被更改,即使是单个字节,它也必须通知用户,而不是来自我。这是数字签名与强名称一起做的,但它们似乎都不是那么好。或者我错过了什么?
我能想到的最后一种可能的方法是手动检查装配的强名称。
PS:目标.net框架是2.0
答案 0 :(得分:1)
我的项目中没有加载大多数重要的程序集作为参考。 我所做的是声明互操作接口(所有项目通用作为基础...是的,引用这个...)然后我在运行时加载所有程序集:
Assembly assembly = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
Type type = assembly.GetType("MyClass");
object instanceOfMyType = Activator.CreateInstance(type);
我使用它有几个原因。我有不同的类实现,我必须根据用户/客户配置调用。它似乎是一个很好的选择,可以保证您使用我的公共令牌和版本加载特定程序集。
经过一番研究后,我找到了这些帖子:
嗯,看了你的问题后我感到很震惊。它引起了我对现在引用我的DLL的担忧。我不知道这是多么安全,但它似乎比仅仅参考它更安全。
我在MS文档中未找到任何有关使用Assembly.Load
和bypassTrustedAppStrongNames
的参考资料。我稍后会进行一些测试,但使用它似乎更安全。