Tag: dll

跨dll进行C#调试

我有一个项目,其调用结构类似于: 主要项目/应用 我的图书馆代码 别人的图书馆代码 我的图书馆代码 一切都是用C#编写的,我可以访问“别人的库代码”。 他们的代码不包含在我的项目中,因为它是开源的而不是我的代码。 我可以制作所有库的调试版本,我已经这样做了。 那个’别人的库代码(SELC,我猜?)是以一种heisen-bug的方式抛出一个exception,而我正试图追踪它并且可能会向项目维护者提交一个bug修复。 问题是,我的调试堆栈停在我的库代码中,并将SELC列为“外部”,我无法调试它。 我已经将pdb文件以及库的调试版本复制到我的应用程序的调试目录中,但仍然没有运气; 我似乎无法调试他们的代码,我根本无法进入它。 曾几何时,回到vs6天,我可以做到这一点 – 在两个不同的环境中同时打开两个不同的项目,并让调试器跟踪从一个项目到另一个项目的dll边界。 我认为function仍然存在,因为它只是非常有用。 有什么建议? 我已经找到了这个答案,但没有找到它,所以如果这是一个骗局,请告诉我在哪里看。

我如何在c#中使用c ++ dll

我喜欢在我的c#应用程序中导入c ++ dll我怎么能这样做?我需要使用什么概念呢?

如何通过另一个DLL访问DLL中的命名空间?

我有多个DLL(自己管理或自己管理)我想要包含在CoreLib.dll中,这样我就不必在每个使用这些DLL的应用程序中包含(可能)数百个DLL。 我将DLL直接包含在DLL中。 所以,我还想实例化我正在创建的应用程序中的那些DLL中声明的类。 我不能做MyApp.exe项目中的图片,即使我想。 CoreLib中没有对A,B或C的引用。 我怎样才能完成我想要的? 编辑我按照建议使用了Facade Pattern,但是我收到了编译错误。 它说我必须在MyApp项目中包含A.dll。 为什么? 这是我想要避免的。 有什么方法吗?

成功注册了COM DLL,但不能使用类方法

我使用regasm.exe注册了一个COM DLL,现在我正在尝试编写一个使用DLL中的类的VBA脚本。 该DLL是ExcelDataReaderLibrary.dll 。 在C#源代码中,该类描述如下(包括来自此库的代码): using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Data; using Excel; namespace ExcelDataReaderLibrary { public class ExcelDataReader { public void readSheet(string filePath,string sheetName,string outPath) { // code for method here } } } 我的assembly.cs文件包括以下内容: [assembly: ComVisible(true)] [assembly: Guid(“b1e78f8f-9ab0-46d8-beac-b843656aacdb”)] 当我打开VBA编辑器并转到引用时,我看到ExcelDataReaderLibrary的引用。 请注意,与此引用关联的文件是ExcelDataReaderLibrary.tlb ,而不是ExcelDataReaderLibrary.dll 。 检查此引用后,我想在VBA中创建和使用ExcelDataReader对象,如下所示: Sub x() […]

将VlcManager与Vlc.DotNet的最新版本一起使用

我正在尝试将Vlc.DotNet库用于我的WinForms C#应用程序。 我不想使用Vlc.DotNet库的Core.Interops中的VlcManager,但是没有最近的文档。 在早期版本中,您可以创建VlcControl和VlcManager的实例,并将VlcManager设置为VlcControl,但这在Vlc.DotNet的最后一个版本中不再可用。 谁能告诉我如何将(多个)VlcControls添加到VlcManager? 这应该会减少内存使用量,并且可以使用更多function,例如NextFrame。 我可以在早期版本中使用的代码: Vlc.DotNet.Forms.VlcControl vlcControl = new Vlc.DotNet.Forms.VlcControl(); Vlc.DotNet.Core.Interops.VlcManager vlcManager = new Vlc.DotNet.Core.Interops.VlcManager(); vlcControl.Manager = vlcManager;

C# – ‘资源’DLL因为不存在而无法加载 – 如何找到引用以便我可以删除它?

我有一个C#解决方案,它在编译时吐出一个可执行的二进制文件。 二进制文件依赖于一个库,它是我写的另一个解决方案的产物,我创建的所有代码都是有关的。 最近我以一种相当随意的方式玩了很多项目设置,试图了解CLR如何构建链接。 不幸的是(可预见的?)我设法打破了我的二进制文件的链接,但我不知道如何解决这个问题。 当我的二进制文件时,我会在应用程序崩溃之前获得以下反馈 加载程序集……..无法在程序集中添加类型MY.Library,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null – 无法加载一个或多个请求的类型。 检索LoaderExceptions属性以获取更多信息 MY.Library.resources DLL的融合日志如下所示。 提到的二进制文件不存在,我不知道它在哪里或为什么要加载。 > All probing URLs attempted and failed *** Assembly Binder Log Entry (22/04/2011 @ 10:34:17) *** The operation failed. Bind result: hr = 0x80070002. The system cannot find the file specified. Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running […]

在项目中使用相同DLL的不同版本

在我的项目中,我必须使用不同版本的AWSSDK dll,为了使这个我接受了这篇文章的帮助。 并将我的一个dll添加到bin文件夹中名为V-1文件夹中。 然后像这样进行配置更改 但我仍然得到这样的错误 错误2无法加载文件或程序集’AWSSDK,Version = 1.4.8.2,Culture = neutral,PublicKeyToken = cd2d24cd2bace800’或其依赖项之一。 该系统找不到指定的文件。 E:\ Live \ Web.config 129 在web-Config中的这一行 任何人都可以指出我做错了什么?

为COM Interop构建.NET DLL时“访问注册表项被拒绝”

目标 : 使用COM interop构建一个C#DLL,由Delphi在另一个环境中调用 。 问题 :Windows阻止了我的构建,说我没有编辑注册表的权限。 语境: 我正在使用Windows 8,Visual Studio 2012,UAC已关闭。 我正在使用RGiesecke的DllExport来使用[DllExport]注释我想要导出为Dll的方法。 我在这里建议使用[ComVisible(true)] 。 我的解决方案平台目标是x86 我编辑了我的解决方案的构建属性,并检查了Build > Output > Register for COM Interop 我通过AssemblyInfo.cs编辑并启用[assembly: ComVisible(true)] 我用一个强有力的名字签署了我的大会 如果我不是作为管理员运行VS2012我得到此错误: Cannot register assembly ‘absolute\path\to\NameOf.dll’ access denied. Please make sure you’re running the application as administrator. Access to the registry key ‘HKEY_CLASSES_ROOT\NameOf.DllClass’ is denied Cannot register assembly ‘absolute\path\to\NameOf.dll’ […]

使用c ++ dll在c#app中堆栈溢出

我有一个使用c ++ / cli托管dll的ac#程序。 该DLL包含许多遗留代码,包含相当多的win32窗口。 问题是,dll中的窗口需要比平均咳嗽更多的堆栈空间。 由于这些不是后台进程而是win32 api我需要扩大GUI线程的堆栈大小(至少我认为dll中的win32 api将使用主gui进程)。 所以我需要一种方法来扩大ac#process中GUI线程的大小。 由于我没有找到任何设置来实现这一点,我从命令行尝试了editbin / STACK,这是有效的。 问题是,它只能在命令行中运行,如果我尝试将其作为post-build-step输入,由于某种原因二进制的堆栈大小不会改变,即使postbuild步骤正确执行并且没有抛出错误:( editbin.exe /STACK:2097152 $(TargetPath) (Editbin.exe在路径中,输出窗口中没有错误) 那么如何为我的c ++ dll获得更多的堆栈大小? [更新] 我注意到使用editbin.exe时出现问题。 这在命令行和后期构建步骤中都不起作用: editbin.exe /STACK:2097152 c:\some\path\bin\release\app.exe 这在命令行中有效,但不能作为构建步骤: editbin.exe /STACK:2097152 app.exe 但我需要它作为后期构建步骤。 我试着把它放到一个批处理文件中,回显以确保调用和工作目录都可以,但它仍然不起作用。 奇怪。

为引用的程序集抛出FileNotFoundException

第一次尝试使用我引用的程序集中定义的类时,我得到了一个非常奇怪的FileNotFoundException 。 程序集未更改,项目文件中的位置与磁盘上的物理路径正确对应。 当我将安装程序添加到Windows服务和安装项目时,这突然开始在包含两个库项目,Windows服务项目和控制台应用程序的解决方案中失败。 但是,我将控制台应用程序作为单个启动对象,控制台应用程序和服务/安装程序项目之间没有任何引用。