首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET Standard中配置TargetFrameworks输出多版本类库

重新加载后,依赖项中出现了如下图所示的3个项 ? 展开每个项查看, 每个版本的程序集对应一个单独的依赖项节点。 ?...通过上面的步骤我们已经实现了多版本输出,但是在实际的企业级业务系统开发时情况比较复杂,还需要解决以下几个问题: 1、条件编译 2、引用本地程序集 3、NuGet方式引用程序集 4、XML文档输出 5、编码与...> 二、引用本地程序集 在下图中可以看出由于3个不同的输出类库中所引用的程序集是不同的,那么当编译时,一定是每个类库进行单独编译,这时就就需要通过某种方式告诉编译器当前编译的类库版本是什么,然后添加针对具体版本的第三方程序集引用...再次添加程序集引用,此时加载了 .NET Framework 4.5 ? 添加一个“System.Net.dll”引用来测试一下 ? 添加后,如下图所示 ?...注意这里是 PackageReference,而之前程序集的是 Reference,而且我们也会发现在VS解决方案管理器中并没有出现 packages.config 文件。

3K21

三、公共语言运行时(CLR)简介

二、源代码=>程序集及程序集概念介绍中介绍了源代码通过C#编译器生成程序集(或者可执行应用程序exe)的整个过程,本文主要介绍公共语言运行时与程序集的关系. 1、 通过C#编译器编译之后生成的每个程序集既可以是可执行程序....分析如下:     相同点:如果程序集文件中只包含类型安全的代码,那么代码在32位环境下和64位环境的windows中都能正常工作.源代码不需要任何改动....架构的非托管代码进行相互操作,这个时候常规的做法可能无法满足这个要求. (2)、解决方案   -使用/platform命令行开关 为了帮助那些在程序集代码中需要操作不安全代码的开发人员,C#编译器提供了一个...RT的ARM机器上使用.如果不指定平台的话,默认就是anycpu,表明最终生成的程序集能在任何版本的windows上运行. (3)、Visual Stdio中设置目标平台的方式 右键项目-属性-生成...(6)、项目指定目标平台后,windows执行通过编译器生成的可执行文件的方式 windows检查文件头,判断需要32位地址空间还是64位地址空间,PE32文件在32位或64位地址控件均可运行,PE32

1.6K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 如何在项目引用x86 x64的非托管代码

    因为现在的项目使用的是 AnyCpu 在 x86 的设备使用的是x86,在x64使用的是x64,但是对于非托管代码,必须要在x64使用x64的dll,在x86使用x86的dll。...在C++没有和C#一样的 AnyCpu 所以需要在项目运行在x86的时候加载x86的dll。 本文告诉大家如何在代码引用不同的dll。...,但是如果dll多了,一个dll都需要写三次,看起来代码还是很烂 设置查找的文件 实际上好多人都觉得,应用程序首先是从运行的目录开始查找dll,如果找不到,就去GAC查找,如果还是找不到,就去System...private static extern bool SetDllDirectory(string path); 需要先把 x86 的 dll 放在程序的 x86文件夹,当然对于x64的大家也知道放哪里...但是存在一些特殊的文件,他不能放在x86文件夹,所以就需要使用下面的代码特别加载 [DllImport("kernel32.dll")] private static extern IntPtr

    74620

    C# 如何在项目引用x86 x64的非托管代码

    因为现在的项目使用的是 AnyCpu 在 x86 的设备使用的是x86,在x64使用的是x64,但是对于非托管代码,必须要在x64使用x64的dll,在x86使用x86的dll。...在C++没有和C#一样的 AnyCpu 所以需要在项目运行在x86的时候加载x86的dll。 本文告诉大家如何在代码引用不同的dll。...,但是如果dll多了,一个dll都需要写三次,看起来代码还是很烂 设置查找的文件 实际上好多人都觉得,应用程序首先是从运行的目录开始查找dll,如果找不到,就去GAC查找,如果还是找不到,就去System...private static extern bool SetDllDirectory(string path); 需要先把 x86 的 dll 放在程序的 x86文件夹,当然对于x64的大家也知道放哪里...但是存在一些特殊的文件,他不能放在x86文件夹,所以就需要使用下面的代码特别加载 [DllImport("kernel32.dll")] private static extern IntPtr

    2.1K10

    WPF 编译为 AnyCPU 和 x86 有什么区别

    本文告诉大家,编译为 AnyCpu 和 AnyCPU(Prefer 32-bit)和 x86 有什么区别 x86 编译为 32 位的程序,如果程序运行的机器是 32 位还是 64 位,程序运行都是 32...位,但是如果在 ARM 下,x86 程序无法运行 AnyCPU 如果在 x86 系统下,运行就是 32 位程序,如果是 64 位系统下,运行就是 64 位程序。...实际上在 ARM 系统,只能使用 AnyCPU(Prefer 32-bit) 运行 32 位程序,如果选择 x86 就无法运行。...参见:https://stackoverflow.com/a/12066861/6116637 使 32 位程序使用大于 2GB 的内存 - walterlv 如果发现引用了 dll 出现了下面的错误...那么就需要检查是不是软件的环境和 dll 的环境不一样,如 软件是 x86 dll 是 x64就会出现这个问题。

    2.2K10

    将浏览器嵌入 .NET 应用程序中:DotNetBrowser 还是 CefSharp?

    在 CefSharp 中,如果 CEF 或 C++/CLI 绑定内部出现问题,这将导致整个 .NET 应用程序崩溃而无法处理这种情况。...这就不太妙了,因为 .NET 应用程序可能会丢失或损坏用户的数据。 对于 DotNetBrowser,Chromium 内部的错误不会导致 .NET 应用程序崩溃。...AnyCPU 在针对 AnyCPU 的应用程序中使用 CefSharp 时,您会发现它在这些应用程序的 64 位环境中无法正常工作。 这儿有几个选项[7]可以解决这个问题。...其中之一是让您的应用程序始终在 32 位模式下运行,另一个更复杂,需要修改项目文件(.csproj 或 .vbproj)和代码。 在 DotNetBrowser 中,AnyCPU 支持开箱即用。...在 DotNetBrowser 中,所有必需的 Chromium 二进制文件和 DLL 都已打包到 DotNetBrowser DLL 中,并且可以在执行期间自动提取。

    65640

    WPF 编译为 AnyCPU 和 x86 有什么区别

    本文告诉大家,编译为 AnyCpu 和 AnyCPU(Prefer 32-bit)和 x86 有什么区别 x86 编译为 32 位的程序,如果程序运行的机器是 32 位还是 64 位,程序运行都是 32...位,但是如果在 ARM 下,x86 程序无法运行 AnyCPU 如果在 x86 系统下,运行就是 32 位程序,如果是 64 位系统下,运行就是 64 位程序。...实际上在 ARM 系统,只能使用 AnyCPU(Prefer 32-bit) 运行 32 位程序,如果选择 x86 就无法运行。...参见:https://stackoverflow.com/a/12066861/6116637 使 32 位程序使用大于 2GB 的内存 - walterlv 如果发现引用了 dll 出现了下面的错误...那么就需要检查是不是软件的环境和 dll 的环境不一样,如 软件是 x86 dll 是 x64就会出现这个问题。

    63120

    .Net 框架

    那么采用C#编译器生成的文件又是什么呢?现在需要引入程序集这个概念:在.NET框架下,类似C#这样的高级语言经过编译后生成的结果文件被称做程序集,其后缀名是.dll(类库)或.exe(可执行程序)。...“System”(是否缺少using指令或程序集引用?)。...因此,虽然单独的N#或C#程序可以完美地在.NET框架下运行,但是它们之间却无法相互引用。...还会注意到,编译器给出的只是警告信息,而非错误信息,因此可以无视编译器的警告,不过这个程序集只能由其他C#语言编写的程序集所使用。...CLR中一个名为Class loader(类加载程序)的组件负责这项工作。它会从GAC、配置文件、程序集元数据中寻找这个类型,然后将它的类型信息加载到内存中的数据结构中。

    1.9K21

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    那么为了在vb调用c#的程序集中避免这些因语言的差异性而导致的错误,在编写c#代码的时候 就应该提前知道vb中的这些规则,来应付式的开发。...通常很少情况下才会将源代码编译成多文件程序集,并且在VS IDE中总是将源代码给编译成单文件的程序集(要么是.dll或.exe),所以接下来我就以单文件程序集为例来讲解。...C#源码被编译成程序集,程序集内主要是由一些元数据表和IL代码构成,我们双击执行该exe,Windows加载器将该exe(PE格式文件)给映射到虚拟内存中,程序集的相关信息都会被加载至内存中,并查看PE...: 未能加载文件或程序集Newtonsoft.Json 10.0的错误。...程序集,接下来CLR搜索Newtonsoft.Json.dll,文件名称满足,接下来CLR判断其标识,发现版本号是6.0,与B程序集清单里注册的10.0版本不符,故而才会报出异常:未能加载文件或程序集Newtonsoft.Json

    2.8K63

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    而不论是单文件程序集还是多文件程序集,其总有一个核心文件,就是表现为后缀为.dll或.exe格式的文件。...通常很少情况下才会将源代码编译成多文件程序集,并且在VS IDE中总是将源代码给编译成单文件的程序集(要么是.dll或.exe),所以接下来我就以单文件程序集为例来讲解。...C#源码被编译成程序集,程序集内主要是由一些元数据表和IL代码构成,我们双击执行该exe,Windows加载器将该exe(PE格式文件)给映射到虚拟内存中,程序集的相关信息都会被加载至内存中,并查看PE...,报System.IO.FileNotFoundException: 未能加载文件或程序集Newtonsoft.Json 10.0的错误。...程序集,接下来CLR搜索Newtonsoft.Json.dll,文件名称满足,接下来CLR判断其标识,发现版本号是6.0,与B程序集清单里注册的10.0版本不符,故而才会报出异常:未能加载文件或程序集Newtonsoft.Json

    4.6K30

    将浏览器嵌入 .NET 应用程序中:DotNetBrowser 还是 CefSharp?

    在 CefSharp 中,如果 CEF 或 C++/CLI 绑定内部出现问题,这将导致整个 .NET 应用程序崩溃而无法处理这种情况。...这就不太妙了,因为 .NET 应用程序可能会丢失或损坏用户的数据。 对于 DotNetBrowser,Chromium 内部的错误不会导致 .NET 应用程序崩溃。...AnyCPU 在针对 AnyCPU 的应用程序中使用 CefSharp 时,您会发现它在这些应用程序的 64 位环境中无法正常工作。 这儿有几个选项[7]可以解决这个问题。...其中之一是让您的应用程序始终在 32 位模式下运行,另一个更复杂,需要修改项目文件(.csproj 或 .vbproj)和代码。 在 DotNetBrowser 中,AnyCPU 支持开箱即用。...在 DotNetBrowser 中,所有必需的 Chromium 二进制文件和 DLL 都已打包到 DotNetBrowser DLL 中,并且可以在执行期间自动提取。

    57220

    C#.NET 如何创建带有本机依赖的多框架多系统 NuGet 包

    .dll、msvcp140.dll、vcruntime140.dll、ucrtbase.dll 等 其中 1 是完全使用 C# 编写的 .NET 程序集,2 是 C++/CLI 程序集。...否则可能迫于 .NET Core 下我还没懂的 .deps 文件的引用机制,你将无法同时引用托管和 C++/CLI 程序集。...图中出现的 Ijwhost.dll 是加载 C++/CLI 程序集必须的 .NET Core 运行时,在生成 C++/CLI 程序集时会出现在其输出目录里。...但如果那个 C++/CLI 程序集需要被引用,你还需要额外加一点点。我们取 x86 下的这两个 dll,将其让入 NuGet 的 ref 文件夹中。...托管、C++/CLI 和本机依赖包(双包) 双包方案旨在解决托管程序集和 C++/CLI 程序集无法在同一个 NuGet 包中被引用的问题。

    86650

    CefSharp基于.Net Framework 4.0 框架编译

    由于使用了程序集统一的方式,解决方案中的所有工程都必须引用这三个库。 C#发展至今,已经从最初的1.0到了5.0版本: 1.0版本 - 基本C#语法。...实际上,我们CefSharp为了兼容使用了Bcl相关组件,上面我们提到: 由于使用了程序集统一的方式,解决方案中的所有工程都必须引用这三个库。...实际上C的工程代码也不例外,所以我们添加Bcl库代码到工程中,由于nuget似乎无法为C工程添加包,所以本人采用手工的方式添加: 1、在vcxproj文件的适当位置添加如下的节点引入Bcl包里面的组件:...完成编译以后,我们尝试运行该WinForm.Example,提示: 未能加载文件或程序集“CefSharp.Core.dll”或它的某一个依赖项。...NuGet引用cef.redist. x86/x64 该NuGet包中包含Cef原生需要的组件和资源包,包括核心的ceflib.dll,具体内容请查看packages/cef.redist. x86/

    42810

    判断DLL文件是CC++动态链接库还是.NET程序集及查看DLL依赖

    前言 如果是程序方面的识别,一般我们如果直接在C++中引用.NET DLL程序会报错的,一般需要我们将.NET DLL生成组件dll 然后再在C++中用,而且需要做些相应的配置。...比如开启clr 选项之类的。 同样在.NET程序中直接使用C++ DLL也是会有问题的,一般要我们通过interop技术比如Pinvoke之类的来做的。...常见问题 客户端在部分电脑上无法加载指定模块 针对异常情况,做故障分析: C++编译的dll正常,C#编译正常; 加载路径也没问题 排除DLL本身的问题后,出现问题的原因就可能是运行环境的问题。...加载的C++生成的DLL,如果其依赖其他DLL,而所依赖的DLL不在当前运行环境,也会出现此种异常。...这里需要注意的是–assembly后的参数是项目生成的文件名,不是新生成的名称. 但是并不建议这样做: 只有.NET的DLL会被嵌入到EXE中,C++的不会,并且大大增加生成时间。

    3.9K11

    当我们自己写了一个C++动态库,给C#调用出现的问题与解决方案

    不久前,由于C#语言限制(太麻烦,代码量太多,并不是无法实现),我用C++写了实现一样功能的动态库,供C#调用 在本机调用C++动态库,都正常,但是只要是无开发、C++、C环境的电脑下运行,就会提示无法找到...Dll 提示[无法加载 DLL"******.dlI":找不到指定的模块。...是Release 就把运行库改成MT 运行库改成MD就会报代码错误 运行库改成MDd还是无法加载 MT    选项:链接LIB版的C和C++运行库。...在链接时就会在将C和C++运行时库集成到程序中成为程序中的代码,程序体积会变大。 MTd  选项:LIB的调试版。...MD    选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对应的DLL,程序体积会减小,缺点是在系统没有对应DLL时程序无法运行。

    1.8K10

    VC++的DLL应用(含Demo演示)

    文件 编译源文件,如果没有出现错误提示,那么,在项目文件根目录的Debug文件夹内会生成一个dll文件“dllDemo.dll”。...将“dllDemo.dll”和“dllDemo.lib”文件复制到Debug目录下,并在项目中包含“dllDemo.lib”文件(或者),否则会出现dll函数找不到的连接错误 3....; } 4.通过断点,可以看到dll函数调用成功 这种方式的静态调用的特点是:在程序一开始执行的时候,就将dll文件全部加载到程序中,不会释放。...这个“*.exe”文件可以是任何平台的,C++也可以,C也可以,C#也可以,只要这个执行文件调用了dll文件中的函数即可。...附件: VC_dll_Realse.rar中是VC编写DLL并引用DLL的相关源码文件 CShapr_ConsoleDllDemo.rar中是VS2005编写的C#引用VC编写的DLL函数的相关源码文件

    96620

    dotnet 从入门到放弃的 500 篇文章合集

    C# 判断系统版本 C# 动态加载卸载 DLL C# 复制列表 C# 如何写 DEBUG 输出 C# 如何在项目引用x86 x64的非托管代码 C# 已知点和向量,求距离的点 C# 强转会不会抛出异常...C# 很少人知道的科技 C# 快速释放内存的大数组 C# 搜索算法 C# 获得设备usb信息 C# 转换类型和字符串 C# 遍历枚举 C# 金额转中文大写 C#将dll打包到程序中 c-70 c-设计模式...C# 局部函数与事件 C# 枚举转字符串 C# 相对路径转绝对路径 C# 解析 sln 文件 C# 谁改了我的代码 C# 通配符转正则 C#判断文件属于文本或二进制 C#判断文件是否被混淆 C#同步方法转异步...Q# 如何使用 Telegram 如何使用本模板搭建博客 如何入门 C++ AMP 教程 如何写毕业论文 表格 如何删除错误提交的 git 大文件 如何在 UWP 使用 wpf 的 Trigger 如何安装...用 sim 卡加密保护资金 硬件分配 神经网络 程序员笑话 简单搭建自己的博客 给博客添加rss订阅 自动机 解决 vs 出现Error MC3000 给定编码中的字符无效 解决 VS 跳转定义和 Resharper

    10.4K20

    lib文件和dll文件的区别_dll2lib

    简介 1.1 C++两种库文件 lib包含了函数所在的dll文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的dll提供,称为动态链接库dynamic link library。...(这种方式不是很灵活,因为lib被编译到.exe中,写出的程序体积大,但是只需要发布exe即可,不需要dll文件) 1.2 C++两种链接方式 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe...在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。...(动态连接)使用dll需注意三个文件: .h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。...运行项目,出现了错误:Can not find:mySub。造成这种错误的原因正是导出函数的修饰名称。在dll二进制文件中,经过编译器的“加工”,实际上有了不同的名称。

    2.9K10
    领券