相关疑难解决方法(0)

将非托管dll嵌入到托管C#dll中

我有一个使用DLLImport使用非托管C++ DLL的托管C#dll.一切都很好.但是,我想在我的托管DLL中嵌入非托管DLL,如Microsoft解释:

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.dllimportattribute.aspx

所以我将非托管dll文件添加到我的托管dll项目,将属性设置为'Embedded Resource'并将DLLImport修改为:

[DllImport("Unmanaged Driver.dll, Wrapper Engine, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null",
CallingConvention = CallingConvention.Winapi)]
Run Code Online (Sandbox Code Playgroud)

其中'Wrapper Engine'是我托管DLL的程序集名称'Unmanaged Driver.dll'是非托管DLL

当我跑步时,我得到:

访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))

我从MSDN和http://blogs.msdn.com/suzcook/看到了这应该是可能的......

c# unmanaged managed dllimport

82
推荐指数
4
解决办法
6万
查看次数

使用Side-by-Side程序集加载DLL的x64或x32版本

我们有两个版本的托管C++程序集,一个用于x86,另一个用于x64.此程序集由符合AnyCPU的.net应用程序调用.我们正在通过文件复制安装部署我们的代码,并希望继续这样做.

当应用程序动态选择其处理器体系结构时,是否可以使用并排程序集清单分别加载x86或x64程序集?或者是否有另一种方法可以在文件复制部署中完成此操作(例如,不使用GAC)?

.net c# 64-bit

59
推荐指数
2
解决办法
3万
查看次数

使用wpf将dll合并为单个.exe

我目前正在开发一个我们有很多依赖项目的项目.我想将所有引用的dll编译成.exe,就像使用嵌入式资源一样.我已经尝试过ILMerge但它无法处理.xaml资源.

所以我的问题是:有没有办法将WPF项目与多个依赖项合并为一个.exe?

c# wpf dll ilmerge

55
推荐指数
6
解决办法
4万
查看次数

使用ILMerge和.NET 4库

两个问题:

1)ILMerged程序集中不包含基本.NET程序集

从.NET 3.5/Visual Studio 2008升级到.NET 4/Visual Studio 2010后,我在后期构建中使用ILMerge时遇到问题.我有一个解决方案,其中有几个项目的目标框架设置为".NET Framework 4" .我使用以下ILMerge命令将单个项目DLL合并到一个DLL中:

if not $(ConfigurationName) == Debug
  if exist "C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
    "C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
      /lib:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
      /lib:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies"
      /keyfile:"$(SolutionDir)$(SolutionName).snk"
      /targetplatform:v4
      /out:"$(SolutionDir)bin\development\$(SolutionName).dll"
      "$(SolutionDir)Connection\$(OutDir)Connection.dll"
      ...other project DLLs...
      /xmldocs 
Run Code Online (Sandbox Code Playgroud)

如果我不指定.NET 4框架目录的位置,我会从ILMerge得到"Unresolved assembly reference not allowed:System"错误.如果我不指定MSTest目录的位置,我得到"不允许未解析的程序集引用:Microsoft.VisualStudio.QualityTools.UnitTestFramework"错误.

上面的ILMerge命令工作并生成DLL.但是,当我在另一个.NET 4 C#项目中引用该DLL并尝试使用其中的代码时,我收到以下警告:

无法解析主要引用"MyILMergedDLL",因为它对.NET Framework程序集"mscorlib,Version = 4.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"具有间接依赖性,其版本"4.0.65535.65535"高于版本当前目标框架中的"4.0.0.0".

如果我然后删除该/targetplatform:v4标志并尝试使用MyILMergedDLL.dll,我收到以下错误:

"System.Xml.Serialization.IXmlSerializable"类型在未引用的程序集中定义.您必须添加对程序集'System.Xml,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.

看起来我不应该这样做.使用我的MyILMergedDLL.dll API的人不应该添加对它引用的任何库的引用.我怎么能绕过这个?

2)仅在使用合并程序集时出现TypeLoadException

编辑:除此之外,即使我System.Xml在使用MyILMergedDLL.dll的使用者项目中添加引用,使用MyILMergedDLL.dll中的一些代码也会产生以下异常:

System.TypeLoadException:无法从程序集'MyILMergedDLL,Version = 1.0.1.1,Culture = neutral,PublicKeyToken = …

.net dll ilmerge assemblies c#-4.0

51
推荐指数
2
解决办法
6万
查看次数

在Visual Studio中编译为独立的可执行文件(.exe)

如何在Visual Studio中创建一个独立的exe.它只是一个简单的控制台应用程序,我认为用户不希望安装一个小的控制台应用程序.我使用visual studio命令提示符编译了一个简单的cpp文件.即使没有安装.NET框架,exe也会工作吗?我使用原生C++代码.

c# c++ executable console-application visual-studio

37
推荐指数
4
解决办法
27万
查看次数

Fody仅在MSBuild 16及更高版本上受支持。当前版本:15

Visual Studio 2017让我知道今天早上有对Fody版本5的升级。我接受了Fody和PropertyChanged.Fody并对其进行了NuGet软件包更新。

现在,我的项目/解决方案将不再构建。

错误是:

“ Fody仅在MSBuild 16及更高版本上受支持。当前版本:15。”

我尝试卸载,关闭VS,然后重新安装均无济于事。

c# fody fody-propertychanged visual-studio-2017-build-tools

36
推荐指数
2
解决办法
2万
查看次数

如何将C++ windows dll合并到C#应用程序exe中?

我有一个Windows C#程序,它使用C++ DLL进行数据i/o.我的目标是将应用程序部署为单个EXE.

创建这样的可执行文件有哪些步骤?

c# dll merge

34
推荐指数
1
解决办法
4万
查看次数

在c#.exe中嵌入.net dll

我正在编写一个使用MS Chart for .net 3.5实用程序的项目.

但是,要么所有用户都需要安装它,要么我需要将dll与程序打包在一起.

我可以让Visual Studio将dll复制到包含该程序的文件夹中,但是是否可以将其嵌入到dll中,以便只有一个文件?

我已经看过几个外部程序,但肯定在Visual Studio中必须有一种方法 - 它是否适用于MS .net dll?

c# embed dll

22
推荐指数
0
解决办法
2万
查看次数

有没有办法在.NET Core中只使用一个文件来运行控制台应用程序?

在.NET框架中,您可以创建一个.EXE将从命令行运行的单个文件,而无需任何额外的配置文件(如果使用ILMerge,则可以将所有.DLL引用放入1个.EXE程序集中).

我正在尝试使用.NET Core来完成同样的事情,但到目前为止还没有成功.即使是Hello World没有依赖关系的最简单的应用程序也需要有一个命名的文件<MyApp>.runtimeconfig.json才能运行dotnet.exe.

dotnet F:\temp\MyApp.dll
Run Code Online (Sandbox Code Playgroud)

内容<MyApp>.runtimeconfig.json如下:

{
  "runtimeOptions": {
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "1.1.1"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果没有与此文件夹相同的配置文件.DLL,我会收到以下错误:

A fatal error was encountered. The library 'hostpolicy.dll' required to
execute the application was not found in 'F:\temp'.
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法改变应用程序,所以它不需要这个配置文件存在,所以这些信息的默认值是在编译内,.DLL但可以通过添加配置文件来覆盖?

注意:如果平台具有正确版本的.NET Core,我还要确保它"正常工作"而不管它上面安装的平台.

背景

我试图获得一个流畅的用户体验,运行一些有时很有用的实用程序,但很少需要.因为它似乎没有可以使用相同的.DLL是从客户端应用程序中引用作为控制台应用程序,未来最好的事情是有一个单一的文件是可以下载,没有任何依赖性运行.

例如,在Java中,您只需.jar在任何支持的平台上下载文件并运行:

java <package>.jar <namespace>.SomeClass [args]
Run Code Online (Sandbox Code Playgroud)

并且它将"正常工作"而没有任何额外的文件.如何使用.NET Core获得类似的用户体验?

简而言之,我想尽量避免"首先解压缩到目录"的额外步骤......

.net c# console-application command-line-interface .net-core

17
推荐指数
3
解决办法
2070
查看次数

在Visual C#2010中将DLL嵌入到.exe中

我正在使用一个使用iTextSharp.dll和WebCam_Capture.dll的C#程序.当我构建程序时,它会在调试文件夹中创建可执行文件,并且它还会按预期将这两个dll复制到调试文件夹中.我想将它们合并为一个可执行文件,但是我失败了.这两个库在解决方案资源管理器中的引用中可见.我还将它们添加为资源.可执行文件大小变得更大,等于三个文件的总和,但是可执行文件仍然需要在其目录中使用这些库...我使用资源文件的"构建操作"属性但没有更改.我也试过ILmerge,但它给了我一个错误.所以我该怎么做?

更新:这是我从ILmerge得到的:

An exception occurred during merging:
Unresolved assembly reference not allowed: System.Core.
at System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode assembly)
   at System.Compiler.Ir2md.GetTypeRefIndex(TypeNode type)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这只是一个Windows应用程序,一个表格将被填写并打印为pdf,并通过网络摄像头拍照(如果有的话).谢谢大家!

c# embed dll itextsharp

14
推荐指数
3
解决办法
4万
查看次数