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

在一个.net sln包含多个project,project引用同一dll导致错误

在一个.net sln包含多个project,其中四个project应用了同一个.net assamply:Lucene.Net。...居然说我没有正确引用,可是检查项目设置都没有问题。 原来被引用项目有一个Copy Local属性,默认为true,就是把应用assamply拷贝到输出目录下。...原来四个project都企图把同一个assamply拷贝过来,而拷贝成功后还锁定了这个文件。这样第一个项目操作成功并锁定文件后,第二个项目拷贝就失败了,因为无法覆盖被锁定文件。...如果有多个project引用同一assamply,除了其中一个Copy Local属性为true,其他改成false就行了。...GACassambly不存在此问题,因为默认Copy Local属性为false。

1.8K70

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

正常如果你想写一个 .NET NuGet 包,直接打包就好了,你引用程序集会出现在 NuGet 包内 lib 文件夹内。然而,如果我们 NuGet 包包含本机依赖的话怎么办呢?...图中出现 Ijwhost.dll加载 C++/CLI 程序集必须 .NET Core 运行时,在生成 C++/CLI 程序集时会出现在其输出目录里。...但如果那个 C++/CLI 程序集需要被引用,你还需要额外加一点点。我们取 x86 下这两个 dll,将其让入 NuGet ref 文件夹。...请特别注意:托管程序集和 C++/CLI 程序集不可在同一个 NuGet 包中被引用!这意味着,如果你己像引用 C++/CLI 又想引用此项目的 dll ,请改用后面的“双包”方案。...目标框架需原来一模一样;也要 GeneratePackageOnBuild 来标记生成 NuGet 包;使用 ProjectReference 引用原来项目,这样可以在生成 NuGet 包自动标记原来

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

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

/out选项, 所以会默认输出在csc同一目录下名为demo.exe文件。...故而每当我们通过VS编译器对项目右键重新生成项目(重新编译),VS都会将引用程序集给复制一份到项目bin\输出目录Debug文件夹下,我们可以通过VS引用程序集右键属性-复制本地 True/Flase...程序集,接下来CLR搜索Newtonsoft.Json.dll,文件名称满足,接下来CLR判断其标识,发现版本号是6.0,B程序集清单里注册10.0版本不符,故而才会报出异常:未能加载文件或程序集Newtonsoft.Json...EEClass是一个非常重要数据结构,当类加载加载到该类型时会从元数据创建出EEClass,EEClass里主要存放着类型相关表达信息。...将这些文件压缩为一个 .zip 文件并放在正确文件夹,就会在展示项予以显示。

4K30

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

, 所以会默认输出在csc同一目录下名为demo.exe文件。...故而每当我们通过VS编译器对项目右键重新生成项目(重新编译),VS都会将引用程序集给复制一份到项目bin\输出目录Debug文件夹下,我们可以通过VS引用程序集右键属性-复制本地 True/Flase...代码存放在哪个项目要有讲究,不允许出现互相引用情况,比如A项目中代码引用B,B项目中代码又引用A。 为什么Newtonsoft.Json版本不一致?...程序集,接下来CLR搜索Newtonsoft.Json.dll,文件名称满足,接下来CLR判断其标识,发现版本号是6.0,B程序集清单里注册10.0版本不符,故而才会报出异常:未能加载文件或程序集Newtonsoft.Json...将这些文件压缩为一个 .zip 文件并放在正确文件夹,就会在展示项予以显示。

2.7K63

.NET 程序集加载上下文

如果你不了解程序集加载上下文,你可能会发现你加载了程序集却不能使用其中类型;或者把同一个程序集加载了两次,导致使用到两个明明是一样类型却抛出异常提示不是同一个类型问题。...将程序集加载到默认加载上下文中,会自动加载其依赖项。 使用默认加载上下文加载到其他上下文中依赖项将不可用,并且不能将位于探测路径外部位置程序集加载到默认加载上下文中。...从字节数组加载程序集都是在没有上下文情况下加载,除非程序集标识(在应用策略后建立)全局程序集缓存程序集标识匹配;在此情况下,将会从全局程序集缓存加载程序集。...在没有上下文情况下加载具有同一标识多个程序集会导致出现类型标识问题,这些问题将具有同一标识多个程序集加载到多个上下文中所导致问题类似。 请参阅避免将一个程序集加载到多个上下文中。...但是,在项目文件 csproj ,我写了一个 Target,将这些依赖全部都移动到了 Dependencies 文件夹

26530

.NET Core 多框架支持(net45+netstandard20)实践遇到一些问题总结

1.2 问题描述: 在.csproj 文件声明了 netstandard2.0;net471 但是用dotnet pack 命令发布一直报以下错...: error MSB3644: 未找到框架“.NETFramework,Version=v4.7.1”引用程序集。...id=56116 问题2:多个TargeFramework 导致关于Nuget包引用问题 问题来源:这个问题是因为自己打包生成一个坑,忘记添加 Assembly Version了,导致发布出去包找不到引用程序集...还望大佬们指点指点 2.2 解决办法 对比一下 publish 文件夹 .deps.json 文件 按照这个思路,有了点眉目,也发现了一个程序Bug 第一张图使用老版本Core,生成出来deps.json...结论: 由于 引用 1.3.2 版本, 然而 CLR 在加载程序集,找不到 Version 为 1.3.2 DLL,于是就找原本项目引用 1.2.3 版本,没有找到,于是报错。理清楚了。

2.1K20

使用插件创建 .NET Core 应用程序

创建应用程序 第一步是创建应用程序: 创建新文件夹,并在该文件夹运行以下命令: .NET CLI dotnet new console -o AppWithPlugin 为了更容易生成项目,请在同一文件夹创建一个...如果 PluginBase.dll 程序集出现在输出目录,PluginLoadContext 将在那里查找到该程序集并在加载 HelloPlugin.dll 程序集加载它。...此时,HelloPlugin.HelloCommand 类型将从 HelloPlugin 项目的输出目录 PluginBase.dll 实现 ICommand 接口,而不是加载到默认加载上下文中...此设置 false 效果相同,但适用于 PluginBase 项目或它某个依赖项可能包括引用。...插件目标框架建议 因为插件依赖项加载使用 .deps.json 文件,所以存在一个插件目标框架相关问题 。

1.3K20

记将一个大型客户端应用项目迁移到 dotnet 6 经验和决策

根据 dotnet 引用依赖策略,如果有版本不兼容情况,将出现 FileLoadException 错误 不能使用 Program File 共享全局程序集,因为这个文件夹里面的内容可能被其他公司应用更改从而损坏...然而在 dotnet 6 里面,却实际 DLL 版本号要大于或等于依赖引用 DLL 版本。核心问题冲突在于分发给用户端运行时框架版本,开发者使用 SDK 版本差异 为什么会出现此差异?...如此可以在开发使用私有的版本 在服务器构建,设置让应用软件入口程序集不再对定制部分程序集引用,从而让构建出来所有程序集不包含对定制部分程序集引用;构建将定制部分程序集引用放入到 runtime...为了能让放在应用自己文件夹里面的 Runtime 文件夹能被识别,就需要定制 AppHost 文件,详细请参阅如下博客 在多个可执行程序(exe)之间共享同一个私有部署 .NET 运行时 - walterlv...开始读取寻找文件夹是放在 AppHost 里面的配置,这是通过 在多个可执行程序(exe)之间共享同一个私有部署 .NET 运行时 - walterlv 方法设置,让应用去先寻找 runtime

1.5K10

CSharp工程几个文件

、xml等 项目所引用程序集信息,包含本地dllNuget包 其它信息 Visual Studio对项目所做配置,均可在该文件中体现出来。...“XXXXXX”或它某一个依赖项,找到程序集清单定义程序集引用不匹配,则应当检查下项目所引用dll文件Web.config配置dll文件信息是否一致。...文件夹用于存放项目引用Nuget包: [zvdx6amfla.jpg] 我们通过Nuget命令行或者Visual Studio图形界面来管理Nuget包,当Nuget包发生变更,packages.config...> 若直接修改packages.config内容,如,直接删除packages.config对某个包引用,.csproj文件依然保留了对该包引用,及packages文件夹也会保留该包。...CoreNuget包位于%UserProfile%\.nuget\packages 可以使用.NET Core提供CLI命令来获取nuget包位置: dotnet nuget locals

1.2K20

CSharp工程几个文件

、html、js、config、xml等 项目所引用程序集信息,包含本地dllNuget包 其它信息 Visual Studio对项目所做配置,均可在该文件中体现出来。...若项目启动后报错:未能加载文件或程序集“XXXXXX”或它某一个依赖项,找到程序集清单定义程序集引用不匹配,则应当检查下项目所引用dll文件Web.config配置dll文件信息是否一致。...文件夹用于存放项目引用Nuget包: 我们通过Nuget命令行或者Visual Studio图形界面来管理Nuget包,当Nuget包发生变更,packages.config.csproj文件内容及...> 若直接修改packages.config内容,如,直接删除packages.config对某个包引用,.csproj文件依然保留了对该包引用,及packages文件夹也会保留该包。...CoreNuget包位于%UserProfile%\.nuget\packages 可以使用.NET Core提供CLI命令来获取nuget包位置: dotnet nuget locals

1.3K10

ASP.NET MVC模块化开发——动态挂载外部项目

最近在开发一个MVC框架,开发过程中考虑到以后开发依托于框架项目,为了框架维护更新升级,代码肯定要和具体业务工程分割开来,所以需要解决业务工程挂载在框架工程问题,MVC传统ASP.NET不同...,WebForm项目只需要挂在虚拟目录拷贝dll就可以访问,但是MVC不可能去引用工程项目的dll重新编译,从而产生了开发一个动态挂在MVC项目功能想法,MVC项目挂载主要有几个问题,接下来进行详细分析完成解决方案...dll后如果要更新业务代码,dll会被锁定,无法替换,需要重启应用 解决办法是通过AppDomain对业务项目dll独立加载,更新进行卸载 1)创建一个RemoteLoader一个可穿越边界类,作为加载...Plugin临时dll文件夹PluginTemp 为什么要创建临时文件夹呢,因为我们需要在PluginTemp真正加载dll,然后监听Plugin文件夹文件变化,有变化时进行AppDomain卸载这个操作...,将Plugindll拷贝到PluginTemp文件夹,再重新加载dll 监听Plugin文件夹: private static readonly FileSystemWatcher _FileSystemWatcher

26930

使用 .NET Core 3.0 AssemblyLoadContext 实现插件热加载

AssemblyLoadContext 程序集列表,包括宿主程序集、System.Runtime 等,这个列表会在 Roslyn 编译插件使用,表示插件编译需要引用哪些程序集。...你可能会有疑问,为什么不在文件改变后立刻触发重新加载插件,一个原因是部分文件编辑器保存文件实现可能会导致改变事件连续触发几次,延迟触发可以避免编译多次,另一个原因是编译过程中出现异常可以传递到访问插件实例线程...接下来它会查找插件文件夹所有 C# 源代码,用 CSharpSyntaxTree 解析它们,并用 CSharpCompilation 编译,编译引用程序集列表是构造函数取得默认 AssemblyLoadContext...那么下次从同一个路径加载仍然会返回第一次加载程序集,这可能是 .NET Core 3.0 实现问题并且有可能在以后版本修复。...guest 文件夹为插件文件夹,之后每隔 1 秒调用一次 GetMessage 方法,这样插件代码改变时候我们可以从控制台输出中观察到,如果插件代码包含语法错误则调用时会抛出异常,程序会继续运行并在下一次调用时重新尝试编译加载

4.6K30

杂谈 System.Drawing.Common 跨平台性(关键词:libgdiplus .NET Core Mono Win32 Linux ……)

它从 API 级别就分离出 .NET Framework 不跨平台部分,然后把它们从 .NET 核心仓库移除,换成 .NET 扩展框架(如 WPF / Windows Forms)。...然而 Unity 不能原生支持 NuGet 包,而 System.Drawing.Common 包要能够在编译自动选择正确 dll引用,是需要 3.4 版本以上 NuGet 程序来支持。...❌相当于没引用 组合2 Mono .NET Standard 2.0 ❌相当于没引用 ❌第三方 NuGet 包管理器会拷贝错误 dll 组合3 IL2CPP .NET 4.x ❌可在编辑器运行,但打包后会出现异常...表“❌相当于没引用”指的是引用dll 相当于没引用 dll,安装此包相当于没有引用此包: 1 2 3 4 5 // .NET 4.x Api 兼容级别报此错误 The type name '...IL2CPP 里在编辑器里可以正常使用(当然能正常,因为编辑器又没用 IL2CPP),打包后出现异常如下(所有的 System.Drawing 方法调用都有异常): 1 2 NotSupportedException

1.2K60

.Net 框架

解决方案引用文件夹 在创建项目并没有做任何额外操作,那么这些引用显然是在创建项目自动添加。...,再次看到了mscorlib.dll,并且String类型Console类型一样,同位于System命名空间下。...概括来说,CLR是一个软件层或代理,它管理了.NET程序集执行,主要包括:管理应用程序域、加载和运行程序集、安全检查、将CIL代码即时编译为机器代码、异常处理、对象析构和垃圾回收等。...相对于编译(Compile time),这些过程发生在程序运行过程,因此,将这个软件层命名为了运行时,实际上它本身时间是没有太大关系。...这个库文件是.NET框架核心组件之一,注意它也不是一个程序集。MsCorEE.dll位于C:\%SystemRoot%\System32\系统文件夹下所有安装了.NET框架计算机都会有这个文件。

1.8K21

关于引用mshtml问题

查这个dll时候还发现了好几篇关于这个dll添加问题文章。顺便看了下,原来这个dll有三个,添加引用时要注意了。...第一篇文章: 1.添加引用问题 一般在开发环境下会在三个地方存有microsoft.mshtml.dll文件。所以在添加引用时,也会出现三个看似一样项。...对于开发者来说,引用其中任何一个都不会影响到正常开发。但问题会出在软件发布之后!在客户机子上运行时,通常会提示文件签名不正确,无法加载。 解决方法就是删除现在对mshtml引用。...调用目标发生了异常。...属性选择: 复制本地=True 特定版本=false; 原因是: 因为 Microsoft.mshtmal.dll 这个 dll 是从 system32 文件夹 mshtml.tlb(

1.1K10

.NET Core跨平台奥秘:复用之殇

包含在元数据针对外部程序集描述是由编译引用程序集决定引用程序集名称(包含文件名、版本和签名公钥令牌)会直接体现在当前程序集元数据。...在默认情况下,CLR要求加载程序集引用元数据完全一致程序集。...如果要使跨目标平台程序集复用成为现实,就必须要求CLR在加载程序集放宽“完全匹配”限制,因为针对当前程序集清单文件描述某个引用程序集来说,在不同目标框架下可能指向不同程序集。...也就说在这种情况下,运行时加载程序集和编译引用程序集是一致。 ?...上面我们仅仅从开发角度解释了定义在PCL项目的代码本身为什么能够确保是目标.NET Framework平台兼容,但是在运行角度来看这个问题,却存在额外两个问题: 元数据描述引用程序集真实加载程序集不一致

1.2K80

“前.NET Core时代”如何实现跨平台代码重用 ——程序集重用

包含在元数据针对外部程序集描述是由编译引用程序集决定[1],引用程序集名称(包含文件名、版本、语言文化和签名公钥令牌)会直接体现在当前程序集元数据。...在这种情况下,运行时加载程序集和编译引用程序集是一致。...)去定位目标程序集,如果无法找到一个之完全匹配程序集,一般情况下会抛出一个FileNotFoundException类型异常。...上面我们仅仅从开发角度解释了定义在PCL项目的代码本身为什么能够确保是目标.NET Framework平台兼容,但是在运行角度来看这个问题,却存在额外两个问题: 元数据描述引用程序集真实加载程序集不一致...元数据描述引用程序集类型定义运行时加载程序集类型定义不一致,比如引用程序集中某个类型被转移到了另一个程序集中。

1.1K80

WinCC V7.0 支持.NET控件编程入门

.cs重命名为 Calculate.cs,弹出对话框询问是否改变所有UserControl1相关代码,点击[Yes]确认。...有同样效果),注意到CalculateControl.dll生成到 bin\Release 文件夹。...在WinCC V7.0加载和使用该控件步骤 1.双击该控件安装文件Setup.exe,安装并注册CalculateControl.dll控件,用户可以修改安装目录,并按照正常步骤安装(如果想卸载该控件...按照如下步骤加载和使用该控件: 在Object Palette(对象面板)Controls页.NET Control上右键单击,选择 [Add/Remove…] 快捷菜单项。...但WinCC V7.0不能使用这种方法,建议使用CreateObject(“.NET控件PROGID”) 来创建和引用加入.NET控件。

2.1K10

Unity调用DLL

1) 添加引用关系 如果有对UnityEngine、UnityEditor引用,需要先添加引用关系。 ? 路径通常位于Unity安装目录下Editor/Data/Managed路径下。...2) 生成DLL文件 建立项目,选择“类库”。目标框架.Net Framework版本,只能选择3.5及以下版本。 ?...3) 在项目中引用DLL文件 Unity会自动加载相应DLL文件,所以DLL文件只要存放于Assets目录下即可,当然为了统一管理,一般放在Plugins目录下。...以上目录只名字相关,层级无关,路径可以是Assets/a/b/c/d/e/../XX.DLL 放置好DLL后,注意刷新Visual Studio解决方案。...参考链接: 在 Unity 工程 (Project) 中使用 DLL(动态库) unity调用dll文件总结 在Unity3D里使用DLL 如何查看DLL方法是否已经导出呢?

3.4K30
领券