Tag: 程序集

签署组件 – 基础知识

签署集会意味着什么? 为什么要这样做? 签署它的最简单方法是什么? 什么是.snk文件?

我可以告诉我的应用程序从特定位置加载所有程序集(DLL)吗?

我的应用程序使用第三方SDK,它安装在具有我的应用程序的每台机器上,我不想在我的应用程序部署中添加这些SDK DLL,因为它占用了大量空间。 由于其他原因,无法在GAC中注册DLL。 无论如何,有没有办法告诉我的应用程序所需的DLL在特定路径上可用?

C#:如何将DLL嵌入资源文件(程序目录中没有DLL复制)

我有一个需要X.dll的C#应用​​程序(项目A)。 我已将生成X.dll的项目添加到A作为Visual Studio中的参考。 我还将X.dll的发布版本添加到A中的资源文件中作为二进制文件。 我告诉项目A 不要将X.dll复制到输出目录。 现在我想要A.exe加载,说“嘿我找不到这个文件”,然后查看资源文件并使用Assembly.Load(byte [])获取X.dll。 我有代码重新魔术DLL,但这个代码永远不会被调用。 目前我有一个骨头简单的项目,只是试图让它工作。 它编译好了。 当我运行它时,我在X.dll上得到一个FileNotFoundException。 我有: [STAThread] static void Main() { AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); } 但* CurrentDomain_AssemblyResolve *中的断点永远不会被击中。 我立即得到一个FileNotFoundException。 当然有一些我遗失的东西?

XAML中的外部别名

我目前正在使用一个为Silverlight 3和4实现Menus和ContextMenus的库。 此库在System.Windows.Controls命名空间中定义MenuItem类。 没有SL3的问题,因为Silverlight类库中的其他地方没有MenuItem类; 但现在我需要在Silverlight 4 Toolkit程序集中使用另一个控件, 工具包现在在同一个程序集中定义了一个System.Windows.Controls.MenuItem ! 所以我需要一种方法来向编译器表明我想从我的旧程序集中使用System.Windows.Controls.MenuItem而不是工具包4程序集中的那个。 该解决方案似乎是“ 外部别名 ”function。 我可以使用外部别名调整我自己编写的文件,但是如何向代码生成器指示从XAML生成“.gics”文件的文件,哪个汇编,更确切地说是哪些别名? 默认情况下,它总是在“.gics”文件中生成System.Windows.Controls.MenuItem变量,当然没有别名,C#编译器无法知道要使用哪个程序集。 我正在使用VS 2010 Professional,但我无法找到更改此行为的选项。 提前致谢。

检测Outlook安装并动态加载INterop.Outlook

我在VS2010中有一个Windows窗体应用程序。 它引用了Interop.Outlook(2003)。 然后,我重新安装了Windows XP和VS2010,但没有安装Outlook。 现在,该项目没有编译。 我想这个,如果Outlook没有安装在我的程序执行的机器上,我的应用程序将无法工作。 我需要知道我是否检测到Outlook已安装,并动态加载Interop.Outlook.dll(用于在.NET 4中使用Outlook PIA或Embedded Interop类型)。 如果计算机安装了Outlook(2003,2007,2010,可能需要代码来检测版本并执行Outlook版本的兼容性),则应用程序可以正常运行Outlook。 如果计算机未安装Outlook,则应用程序可以正常运行而无需functionOutlook。 关于它的任何示例源代码或goog模式和实践?

我该如何排除故障:System.TypeLoadException?

你能给我一个解决System.TypeLoadException问题的方法吗? 我对我的解决方案中的现有项目有exception,我在同一解决方案中从unit testing项目中引用。 当我运行unit testing时抛出此exception。 他们因为这个例外而失败: 细节: 测试方法MyErrorHandler.Test.MyTest.Parse_RecievesValidMessage_ReturnsArray引发exception:System.TypeLoadException:无法从程序集’MyTestAssemblyName.Test,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = Somenumber加载类型’MyTestNameSpace’。 我应该检查什么或在哪里开始调查?

加载同一程序集的不同版本

使用reflection,我需要加载同一组件的2个不同版本。 我可以在同一个进程中在2个不同的AppDomain中加载2个版本吗? 我需要从旧版本的应用程序到新版本进行一些数据迁移。 如果可能,请告诉我,或者我应该使用2个单独的流程。

混淆是可能的混淆

自从上一周以来,我一直在努力解决这个问题。 我混淆了我的应用程序的exe。 我们的应用程序是在线Web应用程序的离线工具 客户端将安装此应用程序并连接到Internet,应用程序将下载相关信息并存储在客户端计算机上的xml文件中以供进一步显示。 出于安全考虑,我们正在加密这些xml文件。 不幸的是,我们在exe内部有一个方法GetCryptXML,它将读取客户端机器上的加密settings.xml并在解密后返回它。 此setting.xml也包含其他xml的加密密钥。 我面临的问题是,即使在混淆之后,人也可以通过传递混淆的名称来调用GetCryptXML方法。 有什么方法可以解决这个问题吗? 这是我解决问题的想法,但我不确定如何实施。 我的想法:只有通过使用InvokeMember()函数进行reflection才能调用我的函数。 在可以调用此函数之前,他/她需要使用此函数来加载程序集。 Assembly.LoadFrom(“myapplication.exe”) 如果myapplication.exe中的代码可以识别哪个应用程序试图加载我,那么我们可以限制它们加载,如果它不是应用程序。 我不知道怎么解决。 任何帮助是极大的赞赏。 谢谢。

如何切换.NET程序集以执行一种方法?

我的.NET应用程序有不同版本的dll,大多数时候我想使用最新版本的dll。 但是,有一种方法可以在一个单独的线程上运行,我需要能够根据某些条件选择较旧版本的dll。 我已经知道只能加载一个程序集然后在默认的应用程序域中卸载它(我不能只保持两个版本都加载,因为那时我遇到了类型问题的重复定义 ) 可能我必须创建一个单独的AppDomain,在那里加载程序集然后卸载它。 此应用程序域将在单独的线程上执行一个方法,并且可以使用不同版本的库。 你认为这是一个好方法/你有更好的想法/你能指出一些能让我入手的资源吗? 非常感谢 ;)

C#仅使用代码添加引用(没有IDE“添加引用”function)

我正在为一个程序编写一个插件,我想把我的代码放在一个DLL中,这样我就可以自由地共享插件而不暴露(赠送)我的代码。 这是我可以访问的基本结构: using System; public class Plugin { public void Initialize() { //do stuff here doWork(); } } 然后我只引用我的代码所在的.cs文件,程序“吃掉”这个插件。 现在,我已经在其中放置了几个逻辑,主要包括不直接绑定到“Initialize()”的函数,仅在启动整个系统的doWork()函数上。 现在,我想将所有代码放在DLL中,然后从Initialize(),myDll.doWork()(或类似的东西)中调用。 PS:这个dll将是一个已编译的C#库(它可以称为动态程序集导入吗?它不会真正动态,因为它会在执行前编译,对吧?) PS2:这样我还可以添加自定义资源,如表单,图片等,没有太大困难吗? PS3:是否有一个免费的工具来保护这种DLL内的代码? (即避免重新设计) 在此先感谢=)