Tag: dll

SQLite.Interop无法在清除解决方案时删除文件

我在MVC Web应用程序中使用Nuget包System.Data.SQLite 。 当我尝试清理解决方案并重建时,似乎存在锁定问题。 我得到的错误消息是: Unable to delete file “bin\x64\SQLite.Interop.dll”. Access to the path ‘\bin\x64\SQLite.Interop.dll’ is denied. Unable to delete file “bin\x64\SQLite.Interop.dll”. Access to the path ‘\bin\x64\SQLite.Interop.dll’ is denied. 我认为数据库仍处于打开状态或.dll仍在使用中,但我找不到任何文档或对同一问题的任何引用。 这个问题似乎是一个类似的问题,但没有解决我的问题。 这是我用来写入SQLite数据库的代码片段: var conn = new SQLiteConnection(“Data Source=” + connectionString); conn.Open(); var debugEntriesTableQuery = “CREATE TABLE …”; var cmd = conn.CreateCommand(); cmd.CommandText = debugEntriesTableQuery; cmd.ExecuteNonQuery(); […]

类库项目文件未编译为.dll或调试

在我的解决方案: 我有一个类库项目,编译成一个DLL。 我有一个网络项目。 (我有多个解决方案,具有不同的Web项目,但是相同的类库) 类项目中的一个文件(utilities.cs) – 突然间不会编译成.dll 我对此文件进行了更改,但更改不会显示在网站上。 所以我在.cs文件中放了一个断点,并尝试运行它…断点没有被击中! 最后我在调用函数的.aspx文件中放了一个断点。 然后我调试了一行调试器,所以它会进入.cs文件,除了我得到错误: “此源文件已更改。它不再匹配用于构建正在调试的应用程序的文件版本。” 所以utilities.cs中的代码没有更新到dll中。 这很奇怪,因为我的其他.cs文件中的代码正在更新(我尝试更改几行)并且能够捕获调试。 任何想法如何解决这一问题? 甚至是问题的原因是什么?

‘无法加载文件或程序集’netstandard,Version = 2.0.0.0,…’。 不应加载引用程序集以执行

目标:从.NET 4.7控制台应用程序,使用Assembly.GetType()的reflection,我尝试从程序集X中提取netstandard 2.0类的类型。然后我想用Activator.CreateInstance()创建此类型的实例。 我想要做的是:但是,这个程序集X依赖于netstandard 2.0。 为了能够获取Type,必须将netstandard依赖项加载到AppDomain中。 这就是为什么当AppDomain通过AssemblyResolve事件请求netstandard程序集时,我只需加载这样的dll: var netStandardDllPath = @”C:\Users\xxx\.nuget\packages\NETStandard.Library.2.0.0-preview1-25301-01\build\netstandard2.0\ref\netstandard.dll”; return Assembly.LoadFrom(netStandardDllPath); 哪个投掷: System.BadImageFormatException:’无法加载文件或程序集’文件:/// C:\ Users \ vincent.lerouvillois.nuget \ packages \ NETStandard.Library.2.0.0-preview1-25301-01 \ build \ netstandard2.0 \ ref \ netstandard.dll’或其依赖项之一。 不应加载引用程序集以执行。 它们只能在Reflection-only loader上下文中加载。 (HRESULTexception:0x80131058)’ 内部exception:BadImageFormatException:无法加载引用程序集以执行。 我所知道的:我知道他们希望我们使用Assembly.ReflectionOnlyLoadFrom加载DLL。 但这样做会阻止我使用Activator.CreateInstance()实现类型。 请参阅Microsoft官方post 另外,我尝试在我的控制台应用程序中引用Nuget软件包NETStandard.Library 2.0.0-preview1-25301-01和NETStandard.Library.NETFramework 2.0.0-preview1-25305-02,这样它就会引用netstandard 2.0库,但是它没有改变任何东西。 问题:有没有人知道是否有正确的方法加载该DLL而没有错误,或者可能是否是一个bug,或者? 或者为什么这种DLL无法加载执行?

为什么在使用控制台应用程序测试时,在dll中启动进程,而在另一个dll调用时却没有?

上周我发布了这个问题: 如何在C#dll中将其作为一个进程运行时获取控制台应用程序输出,因为我试图找出问题的原因。 但是,我一直无法找到我收到错误的原因所以我想我会要求跟进直接解决我遇到的问题。 我正在研究DLL中的方法,我必须在其中启动一个进程。 用于执行此操作的代码是: ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = false; psi.ErrorDialog = false; psi.RedirectStandardError = true; psi.RedirectStandardOutput = true; psi.RedirectStandardInput = true; psi.CreateNoWindow = true; psi.FileName = @”C:\Program Files\OpenMS-1.6\XTandemAdapter.exe”; psi.Arguments = @”-ini C:\XTandemAdapter.ini”; Process getIDs = new Process(); getIDs.StartInfo = psi; getIDs.Start(); StreamWriter inputWriter = getIDs.StandardInput; StreamReader outputReader = getIDs.StandardOutput; StreamReader errorReader […]

从C ++调用C ++ DLL可以正常工作,但不能从C#调用

我有一个名为tccdvc.dll的DLL,它是SDK的一部分: http://www.commell.com.tw/Download/Driver/Industrial%20Peripheral/Driver/MPX-885/MPX-885%20SDK%20(1.2)/SetupCOMMELL%20MPX-885_20100627.rar DLL是用C ++编写的,检查DLL显示它与链接器版本6.0链接,因此我假设它是用VC ++ 6.0编写的。 DLL没有源代码,只有.lib文件和.h文件。 所有导出的函数都声明为extern“C”(因此没有C ++名称修改)和APIENTRY(所以__stdcall)。 我在Windows XP SP3(32位)上的Visual Studio 2010中编写了一个C ++(非.NET)程序来访问此tccdvc.dll。 这在使用提供的.lib文件和使用LoadLibrary / GetProcAddress时都可以正常工作。 我还编写了一个使用tccdvc.dll的C ++ DLL(我们称之为mywrapper.dll),并且在两个版本中,一个使用.lib文件,另一个使用LoadLibrary / GetProcAddress。 再次,这很好。 这个mywrapper.dll使用__cdecl调用约定。 它包含一个名为InitMyWrapperDLL()的函数,它加载tccdvc.dll。 使用LoadLibrary / GetProcAddress的mywrapper.dll版本的代码如下: typedef int (APIENTRY *TCCPROCTYPE01)(); HMODULE TCCmodule; TCCPROCTYPE01 Proc_TCC_DVCOpen; extern “C” __declspec(dllexport) void InitMyWrapperDLL () { TCCmodule = LoadLibrary(“tccdvc.dll”); Proc_TCC_DVCOpen = (TCCPROCTYPE01)GetProcAddress(TCCmodule, “TCC_DVCOpen”); … } 再次,使用C ++前端,这很好。 […]

如何在同一解决方案中使用多个项目的NLog

我在网上搜索了一个非常简单的问题。 我的解决方案是一个exe(WPF)项目和四个类库 。 我需要一个日志记录,我喜欢NLog。 如何在一个解决方案中的所有5个项目中使用它? 我不知道,我是否需要创建(或获取某个地方)从所有项目引用的包装类项目并从那里使用Nlog? 我看到为log4Net写的这样的东西。 或者这种情况是否有一些模式或最佳实践?

将本地化资源.DLL嵌入到C#中的可执行文件中?

我想让我的程序多语言。 我已成功通过Form的Localizable和Language属性使程序多语言化。 它制作了一些.resx文件。 然后我从.resx文件中删除了不需要的文件,例如图像(它们在所有语言中都是相同的)等。 问题是,例如,它还生成一个名为“en”的文件夹,在该文件夹中,另一个生成的文件称为“ProjectName.resources.dll”。 反正有没有将此资源文件嵌入.exe? 将其添加到资源并将“构建操作”设置为“嵌入式资源”也不起作用。 谢谢。

C#:如何包含依赖DLL?

我正在使用在2个DLL中定义的第三方API。 我已将这些DLL包含在我的项目中并设置对它们的引用。 到现在为止还挺好。 但是,这些DLL至少有一个在运行时无法找到的依赖DLL。 我将丢失的DLL复制到项目中并设置“复制到输出”标志但没有成功。 我应该在这里做什么来告诉项目应该在哪里找到依赖DLL? 澄清我尝试添加对丢失的DLL的引用,但因为它不被识别为.Net组件。 无奈之下,我将它直接添加到输出文件夹但没有成功。 最后,我在PC上安装了API,一切正常。 安装程序设置PATH变量,并在安装文件夹中找到DLL。 但是如何告诉项目查看其内部文件夹?

命名空间“System.Data”中不存在类型或命名空间名称“SQLite”(您是否缺少程序集引用?)

是的,我已将System.Data.Sqlite.dll添加到我的项目(VS2012)。 是的,我添加了一个参考。 是的,我已经双重检查,已经创建了引用(参考属性>路径是正确的)。 是的,我使用过Google,Bing, 不,我不知道为什么我的代码不会编译。

使用reflection从bin文件夹加载多个dll

我正在编写一个应用程序,我需要所有commandIds的集合。 这些存在于多个dll中。 我可以访问bin文件夹。 我使用reflection,并且能够一次为一个dll做这个 Assembly a = System.Reflection.Assembly.LoadFrom(@”T:\Bin\Commands.dll”); IEnumerable types = Helper.GetLoadableTypes(a); foreach (Type type in types) { FieldInfo ID = type.GetField(“ID”); if (ID != null) { string fromValue = (ID.GetRawConstantValue().ToString()); ListFromCSFiles.Add(fromValue); } } 我的问题是我需要从所有dll获取所有ID。 Bin文件夹也包含dll以外的文件。