.NET5版本耐受制装配加载
我在.net5/c#中的以下情况,我正在努力解决. 我们有能够加载插件的应用程序(让我们称其为 platform )u.插件P,是 Platform 的一部分并共享其版本的引用实用程序U. 我们的想法是,次要版本中的任何内容都应兼容,即3.1.x.y版本应该能够加载任何P版本3.1.x.y. . 现在,使用3.1.1.10版本和插件P部署了平台,我们想要加载的插件P是针对版本3.1.1.15. 的定位应用程序. 这意味着, platform 现在使用具有相同版本的实用程序U运行,3.1.1.10.包装我们的插件时,我们不包括 Platform 中已经可用的任何内容,在这种情况下,在这种情况下,U.. 加载插件时,我们致电: Assembly.LoadFrom(pathToPluginDll); 毫不奇怪,当加载插件时,它还尝试使用3.1.1.15版本加载其依赖性实用程序U(我们在此位置不提供). 我现在想要的是简单地加载由 Platform 提供的实用程序3
14 2024-04-26
编程技术问答社区
如何在C#中从内存中启动一个程序?
我有一些UI应用程序,该应用程序居住在用户的任务栏中,用C#编写.该工具的EXE被签入我们的源控制系统上的许多使用它的项目,因此我们能够通过签入更新的EXE来更新其运行的版本. . 问题是,当用户获得EXE的最新修订时,程序通常正在运行,并且同步在其机器上失败.我想修复它,以便该程序运行时不会锁定EXE和任何依赖的DLL,以便它们可以同步而无需关闭程序. 当前,我有一个程序,该程序将可执行文件作为参数,并通过提前将汇编内容读取为内存来从内存启动它.不幸的是,在程序所需的DLL方面,这完全失败了. 我现在拥有的代码看起来像这样: public class ExecuteFromMemory { public static void Main(string[] args) { //Figure out the name of the EXE to launch and the arguments to forward to it
14 2024-04-24
编程技术问答社区
窗口服务在装机时锁住了
我有C#写的Windows服务.它也包括独立的控制台模式,用于调试目的.它几乎在运行的每台计算机上都可以正常工作,但是我们遇到了一种情况,当您尝试启动它时,该服务将锁定,然后由于超时而被杀死.但是,当在同一台计算机上以控制台模式运行它时,它启动了. 调试是很痛苦的,因为我实际上无法访问这种情况正在发生的机器,我必须经过人类代理.但是经过一堆反复试验的调试,我终于将原因缩小到了组装负载.根据日志文件,当它命中对特定DLL中任何数据类型的第一个引用时,它就会停止.它甚至没有例外,它只是锁定. [编辑]进一步检查后,似乎没有永久锁定,实际上只需40秒即可完成库,这足以使Windows服务决定杀死该过程. 有任何线索如何调试这种情况? 这是关于我可以重现的最简单解决方案. "之前"出现,但"在"和"之后"不. . private static void LoadAssembly() { Log("During"); MyNameSpace.MyClas
4 2024-04-23
编程技术问答社区
模仿MSbuild过程的组装分辨率
我正在编写一个验证工具,该工具检查项目中引用的文件的版本.我想使用MSBuild使用的相同的分辨率过程. 例如,汇编.负载(..)需要一个完全合格的汇编名称.但是,在项目文件中,我们可能只有" system.xml"之类的东西. MSBuild可能使用项目的目标框架版本和其他一些启发式方法来决定要加载的System.xml. 您将如何模仿(或直接使用)MSBUILD的装配过程? 换句话说,在运行时,我想将字符串" system.xml"以及.csproj文件中的其他信息以及MSBUILD找到的相同文件. 找到相同的文件. 解决方案 我今天遇到了这个问题,我找到了有关如何做的旧博客文章: http://blogs.msdn.com/b/jomo_fisher/archive/2008/05/05/22/programmatily-rogragramaly-rogragramaly-rogrambly-sembly-name-name-name-name-n
2 2024-04-20
编程技术问答社区
如何提供一个后备程序集来代替无法加载的程序集?
在运行时,如果引用的程序集未能加载例如"强名称验证失败"(因为它是测试签名的),是否有一种方法可以从另一个签名的路径中提供替换组件? 我尝试订阅appdomain.currentdomain.semblyresolve,但不会被触发,因为从技术上存在"不良"组件,它就无法加载. 当无法加载程序集时,是否有一种通用方法可以提供后备程序集? 解决方案 我认为您只需致电assembly.loadfrom即可加载您选择的装配,而实际上没有安全检查.我们在应用程序开始时经常使我们这样做,以便我们可以更好地处理其他汇编版本. 还请查看 其他解决方案 是什么触发了负载尝试? IOW您是否致电汇编.负载或这是类型分辨率尝试的结果?如果是后者,则可以尝试使用AppDomain Typeresolve事件,如果前者可以在召集中添加其他逻辑. 如果手动加载汇编,请确保将其加载给assembly.load-不是assembly.loadfrom.类型分辨率有细微的差异,具体取决于
4 2024-04-19
编程技术问答社区
C#-'Resources'DLL无法加载,因为它不存在--我怎样才能找到引用,从而删除它?
我有一个C#解决方案,该解决方案在编译时吐出可执行的二进制文件.二进制文件取决于我编写的另一个解决方案的库,我创建了所有有关的代码. 最近,我以相当偶然的方式玩了许多项目设置,试图感觉到CLR如何构建链接的工作方式.不幸的是(可以预见吗?)我设法打破了二进制的链接,但我不确定如何解决问题. 当我二进制二进制时,我会在应用程序掉落之前得到以下反馈 加载组件........无法 在组装中添加类型 my.library,版本= 1.0.0.0, 文化=中性,publicKeyToken = null- 无法加载一个或多个 请求的类型.检索 loaderexceptions属性 信息 MY.Library.Resources dll的融合日志在下面.提到的二进制不存在,我不知道要加载它的位置或为什么. > All probing URLs attempted and failed *** Assembly Binder Log Entry (22/04/2
6 2024-04-19
编程技术问答社区
我在哪里可以找到Microsoft.VisualStudio.DebuggerVisualizers?
由于缺失的组件,项目不会编译.导致错误的文件具有 using Microsoft.VisualStudio.DebuggerVisualizers; VisualStudio零件以红色标记.我必须安装什么才能修复它?对我来说,这听起来像是Visual Studio会带来的东西,但这就是我使用的,因此已安装... 澄清:我知道它存在于什么组件,并且该参考文献是在项目参考中添加的.但是我怎么得到呢?我必须安装什么SDK?还是我忘了安装Visual Studio时忘记了一些东西? 解决方案 您应该能够在.NET选项卡中的"添加参考"对话框中找到它. 如果不是,则Microsoft.VisualStudio.DebuggerVisualizers.dll生活在Visual Studio安装目录的Common7\IDE\PublicAssemblies子目录中.您可以从那里手动添加它. 其他解决方案 对于Visual Studio 2010 Microsoft
6 2024-04-19
编程技术问答社区
从内存而不是磁盘加载.NET程序集
我有一个令人困惑的问题,试图从内存而不是从磁盘加载.NET组件.如果我对组件进行编译,然后从磁盘(使用LoadFile或LoadFrom)加载它,则该应用程序工作正常. 但是,如果我将编译的汇编DLL文件作为项目中的嵌入式资源,然后使用assembly.load.从资源流中加载字节,则在应用程序继续运行时,我会得到一系列随机错误. 这只是应用程序中八个组件之一的一个问题 - 所有其他组件都可以从磁盘或内存中工作. 感谢您的帮助! 解决方案 您还没有提供足够的细节来猜测您的问题是什么.但是,我可以提出我使用的模式. 我处理嵌入依赖组件的方式是使用AssemblyResolve事件.您将一次接线一次,然后如果CLR找不到磁盘上的组件,则会提高此事件.当事件提出时,您将从资源清单中提取装配位并调用Assembly.Load. 这是代码的外观. internal class AssemblyResolver { public static void
6 2024-04-18
编程技术问答社区
汇编引用在我们的构建服务器上不能正常解决
我们使用VS2008 SP1在C#中代码.我们有一个运行Team System Server 2008的服务器,我们将其用于源控制,任务等. Server 也是我们 Team Build 的构建计算机.很长一段时间以来,这一直工作正常.直到现在.当试图构建一个具有参考的项目之一时并且在物理上登录并通过Visual Studio进行常规构建): c:\ windows \ microsoft.net \ framework \ v3.5 \ microsoft.common.targets :警告MSB3246:已解决的文件具有 不良图像,没有元数据,或者是 否则无法访问.不能加载 文件或汇编'c:\ program 文件\ SyncFusion \ Essential studio \ 7.1.0.21 \汇编\ 3.5 \ syncfusion.xlsio.base.dll' 或它的依赖之一. 模块 预计将包含一个组件 清单. c:\ program 文件\ msbuild
16 2024-04-18
编程技术问答社区
调试错误 "Type 'xx'被定义在一个未被引用的程序集中"
完整错误如下: 类型 'system.windows.forms.control'是 在没有的组件中定义 引用.您必须添加参考 汇编'system.windows.forms, 版本= 2.0.0.0,文化=中性, publicKeyToken = B77A5C561934E089'. 它指向库项目中不需要System.Windows.Forms的第一类中的第一个语句(debug.assert行)(或者我想).我知道如何解决:添加上述参考.但是,我如何找出使用Winforms库的代码触发器的哪一部分触发的哪个库? 通常,您可以添加引用他人的库,但是您只需要在实际使用的其他库中添加引用. 编辑:替代解决方案 也可以使用 解决方案 我怀疑您的代码没有什么行引起的,因为您说您不使用System.windows.forms.forms.forms类型,编译器错误并未指向(有用的)行您的代码. 我认为正在发生的事情是,您正在引用一个具有公共可见方法或属性的库,
6 2024-04-17
编程技术问答社区
让绑定的重定向在办公室插件中发挥作用
我在我的单词addin中使用microsoft.bcl.async,我的addin被编译为一个exe(test_addin.exe)文件,该文件从Microsoft Word中加载为一个汇编,当我直接启动可执行文件时,所有内容都可以正常工作.很好,但是当我从Word运行它时,我会遇到一个错误,说它未能加载 systems.threading.tasks indable. Could not load file or assembly System.Threading.Tasks... 看起来它与绑定的重定向相关,当我尝试从Word运行应用程序时,它希望配置文件位于文件夹中并命名为WINWORD.exe.config,这是不可能的,因为我是不可能的可能无法访问该文件夹. 我的test_addin.exe.config文件:
10 2024-04-15
编程技术问答社区
集合体绑定错误。绑定结果: hr = 0x80070002. 系统无法找到指定的文件
我有一个Visual Studio 2010解决方案,其中包含一个类库(Projecta)和两个SharePoint Projects(ProjectB&Projectc).依赖顺序是Projectb参考proejcta和Projectc参考Projecta&ProjectB. 在一台特定的开发机上,我在尝试构建Projectc时会遇到以下错误: 编译失败.无法加载一种或多种请求类型.检索LoadereXceptions属性以获取更多信息. 查看融合日志时,我注意到以下错误: *汇编活页夹日志条目(14/06/2012 @ 09:38:32) * 操作失败. 绑定结果:HR = 0x80070002.系统找不到指定的文件. 汇编管理器从:c:\ windows \ microsoft.net \ framework \ v4.0.30319 \ clr.dll 在可执行文件中运行C:\ Program Files(X86)\ Microso
20 2024-04-15
编程技术问答社区
解决程序集的异常。试图用修复程序加载一个无法验证的可执行文件
我正在将所需的组件嵌入我的项目中,并在运行时解决AppDomain.CurrentDomain.AssemblyResolve event. 除了 irrklang 's .net4-wrapper,如果我会尝试一个例外,请尝试所以; System.IO.FileLoadException: Attempt to load an unverifiable executable with fixups (IAT with more than 2 sections or a TLS section.) (Exception from HRESULT: 0x80131019) at System.Reflection.RuntimeAssembly.nLoadImage(Byte[] rawAssembly, Byte[] rawSymbolStore, Evidence evidence, StackCrawlMark& stackMark, Boolean fIntros
2 2024-04-14
编程技术问答社区
在两个.NET程序集中使用相同名称和命名空间的类型
出于好奇,我创建了2个组件,这些组件都具有一个完全相同的名称空间(Library1)的类(Class1).然后,我创建另一个客户端引用这两个汇编,并尝试创建一个Class1的实例. 编译器毫不奇怪,给了我关于模棱两可的参考的编译.有什么方法可以明确指定我要使用的组件中的类型来避免歧义? 注意:我知道这很少发生在实践中.这只是一个对语言功能好奇的问题. 解决方案 我认为您应该使用 在引用2个组件的项目中,选择其中一个在参考文献中,在属性窗口中,将别名从global更改为global,例如global, Library1a. > 对于其他参考,请做同样的事情,但要给它一个不同的别名 - 让我们与global, Library1b一起进行. 插入extern alias Library1a;和/或extern alias Library1b;作为消耗组件的任何类的前2行. 访问模棱两可的成员时,使用Library1a.或Library1b.限定了名称空间.示
0 2024-04-13
编程技术问答社区
试图运行Fluent NHibernate教程实例时出现运行时错误
我通过 但是,我遇到了一个运行时错误,似乎无法解决.您可以在教程中看到的CreateSessionFactory方法中发生了错误.在这里是: private static ISessionFactory CreateSessionFactory() { return Fluently.Configure() .Database ( SQLiteConfiguration.Standard .UsingFile(DbFile) ) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .ExposeConfiguration(BuildSchema) .BuildSessionFactory(); } 我
2 2024-04-13
编程技术问答社区
升级C#项目中的引用dll而不需要重新编译项目
我需要使用C#应用程序的构建版本,然后更改参考DLL之一.最好的方法是什么,我在参考DLL上关闭了特定版本,但是一旦我用较新版本替换DLL,我就会得到"无法加载文件或汇编xxxxx,版本= xxxxx.有一种方法可以阻止加载程序关心DLL的版本,以便DLL只是尝试加载? 解决方案 是的,您可以做到这一点 - 请参阅MSDN文章重定向组装版本. 您应该阅读整个文档,但是它实际上涉及汇编的发布者创建"发布者策略文件",或者是将bindingRedirect添加到app.config文件的消费者(如这样)(直接从文章中复制):
20 2024-04-12
编程技术问答社区
当DisallowApplicationBaseProbing = true时需要钩住AssemblyResolve事件
当我设置disallapplicationbaseprobing = true时,我需要在创建的appdomain上连接一个汇编事件.我这样做的原因是要迫使运行时间调用汇编事件,而不是先探测汇编事件.这样,另一个开发人员不能只是将mydllname.dll粘贴在应用程序base目录中,并覆盖我想加载的汇编集团. 这样做的问题是以下... class Program { static void Main() { AppDomainSetup ads = new AppDomainSetup(); ads.DisallowApplicationBaseProbing = true; AppDomain appDomain = AppDomain.CreateDomain("SomeDomain", null, ads); appDomain.AssemblyResolve += OnAssemblyResolve; appDom
6 2024-04-11
编程技术问答社区
C#: 自定义汇编目录
说我们有一个由一个可执行文件和5个库组成的应用程序.通常,所有这些都将包含在一个目录中,并将库从那里加载. 是否可以这样做,例如,一个名为lib的目录中的某些库,而其余的库中的某些库则称为lib2?因此,应用程序目录仅包含可执行文件本身,而其他组件将包含在各种逻辑目录中. 我该怎么做?我想知道如何进行组件的加载,还要知道如何使应用程序的构建将组件放在正确的目录中. 解决方案 您可以将其他搜索路径添加到app.config中,以加载汇编.例如 您可以查看更多详细信息其他解决方案 如果您想手动管理从何处获取收集的地方,则有两种可能性: 处理static void
4 2024-04-11
编程技术问答社区
解决来自另一个文件夹的汇编引用
我正在开发一个应用程序,该应用程序参考并使用了来自某个供应商的一些第三方组件;在开发框中,我在源树中的参考文件夹中有这3个组件,我可以将它们引用并构建应用程序,应用程序构建但由于整个服务器应用程序未安装而不运行,但这很好. 在我想复制此自定义应用程序并运行我引用的所有汇编的服务器上,都在文件夹中,例如: D:\ProgramFiles\VendorName\ProductName\Support\API\Bin64 并且,如果我将小型可执行文件复制在该文件夹中并运行它,则可以完美地工作,但是如果我将.EXE放在更合适的文件夹中,请像我想要的那样: D:\ProgramFiles\MyCompanyName\MyProduct\bin\... 它不起作用,因为它无法解决这些组件. 我知道我可以在app.config中使用探测来指定我的exe必须在哪个文件夹中查找参考文献,但是iMy案例中的组件不在子文件夹中,更多的是完全不同的位置. . 我不想在我的
8 2024-04-10
编程技术问答社区
如何在没有ILMerge的情况下将程序集嵌入到一个控制台应用程序中?
这里有很多关于此的帖子 - 归因和the-then-calling-it-flom/97290#97290">此代码来自另一个so post ,然后将代表分配放在我的main()方法中.其他帖子都没有直接回答我的问题. 我将第三方大会嵌入为资源,但是当我启动该应用程序时: 我将获得带有filenotfoundexception内部的typeInitializationException.它试图在文件系统上找到程序集并失败. 它永远不会到达主要方法,在其中分配了用于汇编的事件处理程序 我有两个嵌入在我的资源中的汇编.Resx,一个是第三方工具(命令行解析器),另一个是申请肉的库文件. 也许使用控制台应用程序不可能?似乎不太可能,但我看不到解决方案. re:ilmerge等:我想在不涉及任何工具的情况下完全在代码中完成此操作.原因:我不想在存储库中拥有源代码,该源代码要求其他团队成员安装可能还没有的工具.如果这是不可能的,那么Ilmerge看起来就像下一个最佳
8 2024-03-16
编程技术问答社区