动态调用程序集的复杂的API问题
我有一个有趣的挑战,我想知道这里是否有人可以给我一些方向. 我正在编写一个.NET Windows表单应用程序,该应用程序在网络上运行并使用SQL Server保存和拉数据. 我想提供一个迷你"插件" API,开发人员可以在其中构建自己的程序集并实现特定的接口(idatamanipulate).然后,我的应用程序可以使用这些组件来调用接口函数并执行某些操作. 我可以使用我的API创建汇编,将文件复制到本地硬盘驱动器中的文件夹,然后配置我的应用程序以使用反射来调用已实现的接口(idatamanipulate.execute). . 问题: 由于该应用程序将安装在网络的多个工作站中,因此无法复制用户将创建的插件DLL. 我尝试的解决方案: 解决方案1 ​​ 将API DLL复制到网络共享. 问题: 需要允许partartellastedcallersattribute,这需要.net唱歌,我不能从用户那里强迫. 解决方案2 (首选)
0 2024-03-01
编程技术问答社区
在一个.NET程序集中向ADODB命令添加参数时出错
我有一个.NET组件,该组件正在经典的ASP页面消费.我创建了一个返回ADODB RecordSet的方法.在我的adodb命令对象中,我要使用以下格式来提供参数 With ADODBCmd .ActiveConnection = ADODBConn .Prepared = True .CommandType = CommandTypeEnum.adCmdStoredProc .NamedParameters = True .CommandText = Sql_GetMyBook .Parameters.Append(.CreateParameter("@book", DataTypeEnum.adChar, ParameterDirectionEnum.adParamInput, 50, MyBook)) End With 我有铸件错误... 系统. 消息= system.invalidcastException: 无法施放类型的对象 "系统.__ comObjec
6 2024-01-19
编程技术问答社区
我在哪里可以找到Visual Studio中尚未有的微软程序集?
我认为某人通常可以回答这个问题,但是如果有人想获得特定的问题,我试图使用: 使用system.web.security.singlesignon; 使用system.web.security.singlesignon.authorization; 我已经搜索了我的大脑,这是我发现的最接近的答案: "我们讨论了这个离线,但看起来ADFS大会很愉快,但是 未安装在文件系统上或用vs.net注册,以便显示 在.NET选项卡中.我猜MS可能需要加强安装程序 这种情况.同时,您可能需要自己执行此操作." 到底是什么,我自己做什么? 解决方案 我找到了一个安装log 预计将在 中 c:\ windows \ adfs \ system.web.security.singlesignon.dll 在Windows Server 2003中 通常,我想DLL会在系统范围的全局组装缓存(GAC)中注册,因此您不必知道实际路径.如果在GAC中注册了一个程序集,
0 2024-01-19
编程技术问答社区
由于格式不正确,加载程序集失败
我在带有几个汇编的一个非常大的Windows Forms .NET(C#)应用程序上开发.最初,每个组件都是为"任何CPU"的目标平台建造的. 由于X64机器上的水晶报告问题,我们必须为X86目标平台构建整个项目.我开始重建X86项目的一些项目,而且效果很好. 但是,有一个问题是,当我尝试将其用作另一个组件中的参考时,另一个不会加载它给出以下错误: 无法加载文件或汇编#myAssembly#或其依赖项之一.试图加载具有不正确格式的程序. 在带有多个组件的示例项目中与Crystal一起玩时,我发现在为不同的目标平台构建项目时会发生此错误.但这不是这里的情况.我为x86建立了每个项目,只是无法弄清楚问题在哪里. 解决方案 您可以尝试使用目标平台" x86"或" x64"来构建您设置为"任何CPU"的所有其他项目.
2 2024-01-09
编程技术问答社区
C#编译为32/64位,还是用于"任何CPU"?
可能的重复: Visual Studio"任何CPU"目标是什么意思? 我注意到,在Visual Studio中编译C#代码时,通常有用于32/64位系统编译的选项,并且还有一个用于编译 /p> 这两个选项有什么区别?选择任何CPU 是否仅编译为中间字节代码,而第一个选项则将其编译到机器代码(这听起来不太可能)?还是其他? 解决方案 在 32位机器上: 任何CPU :作为一个32位过程运行,可以加载任何CPU 和 x86 组件,将获得如果它试图加载 x64 组装. x86 :与任何CPU . x64 :BadImageFormatException始终. 在 64位机器上: 任何CPU :以64位的过程运行,可以加载任何CPU 和 x64 组件,都将获得如果它试图加载 x86 组装. x86 :作为一个32位的过程运行,可以加载任何CPU 和 x86 组件,将获得BadImageFormatException如果它试图加载 x64 组
10 2024-01-08
编程技术问答社区
我怎样才能确定一个.NET程序集是为x86还是x64构建的?
我有一个任意的.NET组件列表. 我需要通过编程检查是否为X86构建了每个DLL(与X64或任何CPU相对).这可能吗? 解决方案 看System.Reflection.AssemblyName.GetAssemblyName(string assemblyFile). 您可以从返回的汇编名称实例检查汇编元数据: 使用 powershell : [36] C:\> [reflection.assemblyname]::GetAssemblyName("${pwd}\Microsoft.GLEE.dll") | fl Name : Microsoft.GLEE Version : 1.0.0.0 CultureInfo : CodeBase : file:///C:/projects/powershell/BuildAnalyzer/... Esca
2 2024-01-08
编程技术问答社区
无法在Visual Studio 2019中向.Net Core应用程序添加程序集
当我尝试在项目中添加缺失的组件(专门用于单元测试)时,我注意到"添加参考"对话框中缺少"汇编"选项卡,请参见: 这是一个错误还是预期的行为?如果预计我们应该如何添加缺失的组件. 请注意,我已经尝试了Nuget Package Manager,但仍无法使用. 解决方案 这是正确的行为.净核心项目不可用"汇编"选项卡.您将无法从系统中添加组件,因为Net Core项目与Nuget的依赖关系一起使用.因此,要添加您的引用,您需要改用Nuget软件包管理器. 右键单击您的项目 选择"管理Nuget软件包" 找到要从列表中添加的软件包 其他解决方案 您可以添加外部组件,例如rebex,通过右键单击项目,选择添加>>项目参考... >>浏览,然后点击浏览按钮. 我刚刚使用VS2019 v.16.9.4在.NET Core 3.1.x项目上完成了此操作.完全没有问题.
10 2024-01-08
编程技术问答社区
MSVCR100D.DLL和依赖性步行者
我将msvcr100d.dll放入C:\ Windows \ System32文件夹中,但Dependency Walker仍在抱怨它丢失了.有什么想法吗? 解决方案 依赖性沃克(Walker)很长时间没有更新.我认为作者只是放弃了试图跟上Windows开发的努力.特别解决并排清单查找规则是一个非常困难的问题. setDLldirectory()无法静态解决.对于延迟加载的DLL,这并不是很聪明,并且对转发器的DLL导出一无所知.您几乎总是会收到实际并未丢失的丢失的DLL列表. 在64位操作系统上使用32位版本也无法正常工作,在MSVCR100D.DLL的情况下,您可能的错误.必须将其复制到C:\ Windows \ syswow64,而不是32位可执行文件的System32.您真的希望为MSVCRT版本10及以上的本地部署.换句话说,只需将DLL复制到与EXE相同的目录中.将其放在Windows系统目录中,您会暴露于太多的DLL地狱,远远超出选择错误的系统目录. 如
2 2024-01-08
编程技术问答社区
另一个引用旧dll的程序集
我有2个组件,让他们称其为A和B.我已经为他们分配了强人名称,现在出现的问题是汇编B正在寻找旧版本的汇编A. ** edit2:如果我删除组装问题,问题仍然存在,所以可能只是VS2008寻找旧版本吗?另外,通过FusionLog,我看到了以下警告:WRN应用程序配置文件绑定重定向不允许.这与此有关吗? ** 我得到了同类的多个错误,这是一个片段: You must add a reference to assembly 'AssemblyA, Version=1.2.4737.25316, Culture=neutral, PublicKeyToken=null'. 项目内部命名的indemblya显示了以下属性: 在app.config内部,我已放置了这件代码:
4 2024-01-08
编程技术问答社区
.NET相当于静态库?
我正在用两个版本,"普通用户"版本和" pro"版本构建一个托管代码(主要是C ++/CLI)的工具. 两个版本之间的核心代码相同的事实给我带来了一些麻烦对于工具的两个版本的项目中的常见代码.我宁愿为该工具的每个版本提供一个通用代码的项目和一个项目,并使工具的每个版本都取决于通用代码,并根据需要将其链接. 在不受管理的C ++中,我会通过将通用代码放在静态库中并将工具的两个版本链接到它来做到这一点.我似乎无法在C ++/CLI中使用它.看来我被迫将常见的代码构建到DLL组件中,这会导致DLL比我想要的更多. 因此,总而言之,我无法确定如何在一个项目中构建常见代码并将其与每个最终产品项目链接起来,以生成两个包括通用代码的单个DLL组件. 我可能做错了什么,但是我试图使用NetModules和其他任何方法来解决如何做到这一点,而我只是无法正常工作.最后,我唯一的工作方式就是告诉链接器链接通用代码组件的构建产品,而不是有效的结果,但有点像hack iMho. 无论
6 2024-01-08
编程技术问答社区
创建应用域并加载程序集
我想创建一个具有默认权限的应用程序域,并使用默认的特权来创建应用程序域中,并执行汇编内的方法. 解决方案 您可以看一下以下文章在MSDN上.或者,如果要在另一个应用程序中构造某种类型的实例(假设此类型具有默认构造函数): var domain = AppDomain.CreateDomain("NewAppDomain"); var path = @"C:\work\SomeAssembly.dll"; var t = typeof(SomeType); var instance = (SomeType)domain.CreateInstanceFromAndUnwrap(path, t.FullName); 使用此方法返回的instance变量生存在您新创建的应用程序域上,您可以操纵它. 其他解决方案 也许这有帮助 我可以在mono csharprepl中重新安装吗? var dom = AppDomain.CreateDomain("tmp");
6 2024-01-08
编程技术问答社区
如何在WP7中从Stream或byte[]中加载一个程序集?
我想使用流或字节数组在运行时加载程序集. in .net您可以使用Assembly.Load(Byte[], Byte[]) http://msdn.microsoft .com/en-us/library/twt16z2x.aspx 在标准银光中,您可以使用AssemblyPart.Load() http://msdn.microsoft.com/en-us/library/cc190521%28v=vs.96%29.aspx 但是在Windows Phone 7中,这些方法都不可用. 解决方案 好吧,正如您所发现的那样;你做不到.该设计不允许您加载不会在XAP中运送的组件.这是一个安全设计,因为他们不希望您下载并运行尚未通过市场检查的任意代码. 这与Apple如何控制其应用商店相当.为什么不存在此功能,为什么我会怀疑它会添加: 市场.微软要求所有应用程序通过Blackbox检查.他们可能会寻找许多东西,例如性能,主要错误,风险材料和UI一致性.允
4 2024-01-08
编程技术问答社区
"为什么我的.net exe这么大 "的分析工具?
是否有一个工具可以解释.NET组件(可执行文件或DLL文件)的大小? 在过去,有一个IDE扩展名,可以详细说明项目使用的空间. 它应该显示大型代码文件: 和数据资源: .net世界有这样的东西吗? 我真的以为转移到.NET,而不再需要将整个VCL构建到可执行文件中,可执行尺寸会缩小. 奖金阅读 解决方案 标准SDK拿走了ILDASM(IL拆卸器),在视图菜单中具有"统计"选项,它会像这样分解: File size : 3072 PE header size : 512 (456 used) (16.67%) PE additional info : 167 ( 5.44%) Num.of PE sections : 2 CLR header size : 72 ( 2.34%) CLR meta-data siz
6 2024-01-08
编程技术问答社区
一个C#.dll程序集能否包含一个入口点?
我的目标是创建一个将启动影子复制应用程序的可执行文件.诀窍是,我希望这个入门程序没有外部依赖关系,而不必包含有关其必须启动的程序的任何知识. 我也希望它是目录中唯一可执行的可执行文件.换句话说,我希望它"运行"一个.dll组件而不是.exe组件. (我可以要求每次加载到新应用程序的.dll文件的名称是相同的,例如main.dll或类似的东西.) 看起来像 appdomain.executeassembly 会做我想要的.它说它将开始在" .NET Framework标题中指定的入口点". 当我尝试使用该功能时,我会得到错误"汇编中找不到的入口点". 我拥有的启动程序,只是试图运行组件: static void Main() { AppDomain domain = AppDomain.CreateDomain( "DllApp" ); domain.ExecuteAssembly( "DllApp.dll" ); } 在.dll文件中的应
2 2024-01-08
编程技术问答社区
找出所有DLLs的依赖性?
我有DLL的集合(例如20).我如何根据哪个特定的dll(例如dll a)找到所有的dll? 解决方案 如果您是指编程,请使用 Assembly.GetReferencedAssemblies . 您可以递归地使用该程序来查找所需的所有组件. (因此,您找到X的依赖项,然后找到依赖项的依赖项等) ) 其他解决方案 由于该问题被标记为" C#",因此我假设您在谈论托管DLL(汇编).在那种情况下,依赖关系无用.如果您想使用一个程序来做到这一点,那么好的是Jetbrians和Redgate的反射器.或者您甚至可以在Visual Studio中使用对象检查器. 但是,这可能是一个漫长的过程,而且也很麻烦.我会写一个简短的c#program/f#脚本,该脚本使用Assembly.GetReferencedAssemblies,如乔恩所述. 相反,如果您想使用程序(C#代码)检查本机DLL依赖关系,则必须将检查PE文件(MS DLL和EXE文件格式)及其IAT(
6 2024-01-08
编程技术问答社区
组装中的类的数量如何影响性能?
我正在从事的项目将为大量课程生成代码 - 预计数百至数千个. 在生成时间尚不清楚这些课程中有多少个将被访问. 生成的类可以(1)全部生活在单个组件中(或可能少数组件),当脚趾消耗过程开始时将加载. ...或(2)我可以为 class生成一个组件,就像java将每个类都编译为单个*.class二进制文件,然后提出一个机制按需加载组件. 问题:哪种情况会产生更好的(内存和时间)性能? 我的直觉是,对于情况(1),负载时间和使用的内存与组成单个单片组件的类数直接成正比. OTOH,案例(2)带有其并发症. 如果您知道与加载组件的内部内容有关的任何资源,尤其是拨打的代码(如果有的话!?)以及分配了哪些内存(新加载的组件的书籍保存),请分享它们. 解决方案 您正在尝试解决一个不存在的问题,组装加载是非常在.NET中进行了大量优化. 将大型组件分成许多较小的组件毫无疑问是您能做的最糟糕的事情.到目前为止,加载程序集的最大费用是找到该文件.这是一个冷启动问题
0 2024-01-08
编程技术问答社区
在运行时动态地改变对一个dll的引用
我的情况是,我在不同文件夹中有几个.dll文件,所有文件夹都包含相同函数(具有相同名称),但是具有相同名称的内部函数内部函数是不同的. 我在设计中创建了我的应用程序,引用了其中一个.dll文件. 但是我希望,当我的应用程序启动时,使用精选案例可以更改对以下dll之一的引用. 这是可能的吗? 谢谢! 解决方案 您无法做到这使用汇编将其加载到您的应用程序中.加载并对其进行反思以使用其类型(因为您不知道该类型的类型,因此未参考该类型,因此您必须针对查询类型进行编程). > 因此,如果您已经针对引用的DLL进行了编程,则您做错了,因为使用内部代码的整个方法是不同的,如果您需要动态. 例如,如果您在名为" mydll.dll"的dll中具有" mytype"类型的" mytype",如果使用它引用它,则与执行 一样简单 new mytype().mymethod(); 如果您不参考dll,而是动态地解决它,它看起来像 var asm = Assem
6 2024-01-08
编程技术问答社区
预装所有组件(JIT)。
我们是第一次加载一些重型UI屏幕.我们的项目分为一个主要可执行文件和几个DLL文件. DLL文件还可以包含第一次加载时速度慢的UI屏幕. 有没有办法(在代码中)我们可以预紧所有引用的组件以避免使用JIT汇编? 我知道有一个工具,称为 ngen .是否可以在开发环境中操作NGEN,以便我们可以立即看到其影响?不过,理想情况下,我们想从代码中预加载引用的组件. 使用C#.NET 3.5以及我们的UI组件的DeVexPress. 解决方案 我个人发现将预吉利特人放入"程序"中有助于某个应用程序,但这是一个特定情况的问题. 更重要的是, wal的答案将崩溃一种抽象方法,因此已经添加了两行代码以跳过抽象方法. static Program() { foreach (var type in Assembly.GetExecutingAssembly().GetTypes()) { foreach (var method in ty
0 2024-01-08
编程技术问答社区
Could not load file or assembly HRESULT: 0x80131515 (When adding controller to MVC project that has assembly references on network drive)
我已经看过了: VSTS 2010 SGEN:错误:无法加载文件或汇编(Hresult的例外:0x80131515),并且没有任何答案可用.当我构建或其他任何东西时也不会出现.我可以正常运行该项目,当我尝试添加实体框架模板控制器时会发生这种情况: 然后我得到此错误: 所有项目文件都在我的网络共享上,因为这是我的文档所在的工作中.这是我尝试的: 1)在项目设置中将发电机序列化组件转换为ON,关闭和自动. 2)将sgen.exe.config添加到C:\ Program Files \ Microsoft SDKS \ Windows \ Windows \ v7.0a \ bin \ bin \ bin \ netfx 4.0具有以下代码的工具: 3)试图解开
2 2024-01-08
编程技术问答社区
混合模式程序集是根据运行时的'2.0.50727'版本构建的,不能在4.0运行时中加载。
我正在使用Visual Studio 2012和.NET Framework 4.5 我有2个解决方案:1)WPF应用程序2)类库(DLL) 类库包含3个按钮和一个控件,该按钮必须在WindosFormshost控件内部,因为它是为Winforms制造的. .NET框架之外的唯一引用的组件是上述Winforms控制和ItextSharp. Winforms控件似乎有点旧了,当我将参考放在DLL中时,我会遇到与标题相同的错误,但是遵循其他问题/答案,我将其放在配置文件中:
88 2024-01-08
编程技术问答社区