相关疑难解决方法(0)

嵌入.dlls-C#中的程序集解析

我有一个.dll试图作为资源嵌入可执行文件中。以下两个问题会有所帮助,但不是完整的帮助:

将装配体嵌入另一个装配体中

这似乎不符合书面要求。args.Name不能照原样使用,但即使已修复,程序仍会抱怨缺少.dll,表明程序集未正确加载。

将DLL嵌入已编译的可执行文件中

以及以下答案之一的链接:

http://codeblog.larsholm.net/2011/06/embed-dlls-easily-in-a-net-assembly/

但是,我的项目中没有任何形式的“ App.xaml *”文件-我没有使用WPF;我正在为自己的可执行文件使用WinForms(由于可执行文件的性质,更改并不是真正的选择)。

因此,我正在寻找一套完整的说明,以将类库作为资源嵌入可执行文件中,并从资源中加载.dll,而无需在嵌入式资源外部添加.dll文件。

例如,将一个“ App.xaml”文件简单地添加到WinForms项目中是否可行,或者是否存在我不知道的负面交互作用?

谢谢。

编辑:这是我目前正在使用的:

/// <summary>
/// Stores the very few things that need to be global.
/// </summary>
static class AssemblyResolver
{
    /// <summary>
    /// Call in the static constructor of the startup class.
    /// </summary>
    public static void Initialize( )
    {
        AppDomain.CurrentDomain.AssemblyResolve +=
            new ResolveEventHandler( Resolver ) ;
    }


    /// <summary>
    /// Use this to resolve assemblies.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    /// <returns></returns>
    public …
Run Code Online (Sandbox Code Playgroud)

c# dll embedded-resource

3
推荐指数
1
解决办法
5345
查看次数

嵌入式资源文件在运行时不存在 .Net 4

我有一个需要在运行时访问的文件,我已将其包含在我的项目中并将其设置为嵌入式资源(它实际上是一个源文件,我将扩展名更改为 .cs.txt 以绕过 VS 尝试编译它.这应该不重要,但我无论如何都会提到它以防万一)。当我尝试获取文件时

var assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(resourceName);
Run Code Online (Sandbox Code Playgroud)

我得到一个空值。我已确保使用 Namespace.Folder.Filename 表示法,但这没有帮助。看来该文件实际上不存在,因为当我打电话时

assembly.GetManifestResourceNames();
Run Code Online (Sandbox Code Playgroud)

我得到一个空字符串数组。知道会发生什么情况吗?

c# embedded-resource .net-assembly

3
推荐指数
1
解决办法
5244
查看次数

Inno Setup-具有依赖项的外部.NET DLL

我试图在安装过程中在Inno Setup脚本中使用自定义DLL。我编写了一个非常简单的函数,该函数基本上使用MySQL .NET连接器检查MySQL数据库的连接字符串(目标服务器上没有MySQL客户端)。此导出函数的代码为:

public class DbChecker
{
    [DllExport("CheckConnexion", CallingConvention.StdCall)]
    public static int CheckConnexion([MarshalAs(UnmanagedType.LPStr)] string connexionString)
    {
        int success;
        try
        {
            MySqlConnection connection = new MySqlConnection(connexionString);
            connection.Open();
            connection.Close();
            success = 0;
        }
        catch (Exception)
        {
            success = 1;
        }
        return success;
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数以这种方式导入Inno Setup中:

[Files]
Source: "..\..\MyDll\bin\x86\Release\*"; Flags: dontcopy;
Run Code Online (Sandbox Code Playgroud)

[Code]
function CheckConnexion(connexionString: AnsiString): Integer;
external 'CheckConnexion@files:MyDll.dll,MySql.Data.dll stdcall setuponly loadwithalteredsearchpath';`
Run Code Online (Sandbox Code Playgroud)

问题是安装程序在运行时引发异常:

运行时错误(位于53:207):

外部异常E0434352。

我认为我必须使用files前缀,因为在将NextButtonClick文件复制到{app}目录之前,在事件处理程序中调用了该函数。

两者MyDll.dllMySql.Data.dll{tmp}在运行时正确提取到目录中。

我尝试了带有和不loadwithalteredsearchpath带有标志的结果相同。 …

.net c# dll inno-setup pascalscript

3
推荐指数
1
解决办法
730
查看次数

将DLL导入Inno-Setup的问题

我在innosetup安装脚本中导入C++ DLL.DLL代码如下:

void __stdcall SetFbParam(char *dbFileName,char *dbTableName,char *dbParamName,char *dbParamValue){
//of no use here and doesn't change anything}
Run Code Online (Sandbox Code Playgroud)

在Innosetup中,我使用导入它

procedure FBset(dbFileName,dbTableName,dbParamName,dbParamValue: String;);
Run Code Online (Sandbox Code Playgroud)

external 'SetFbParam@files:MyDll.dll stdcall setuponly';

但是,我总是启动安装程序的过程中得到一个运行时错误,说这不能导入我的DLL.我尝试了各种调用约定,但总是失败.如果它是任何重要的,我在(安装程序请求权标高和崩溃后),运行Win7的X64与UAC.

确切的消息是:
错误
运行时错误(在-1:0):
无法导入
DLL:C:\ Users\Nevod\AppData\Local\Temp\is-6LOEC.tmp\MyDll.dll

dll就在那里.

谢谢!

c++ dll inno-setup dllimport

1
推荐指数
1
解决办法
4999
查看次数