问题标签 [dll-reference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2228 浏览

c# - 我如何知道 .NET Standard 需要哪些平台扩展?

我针对我想从我自己的 .NET Standard 类库中使用的类库运行.NET Portability Analyzer 。我要使用的类依赖于 .NET 框架。.NET Standard 的兼容性结果为 91%,.NET Standard + Platform Extensions 的兼容性结果为 100%。

根据我的阅读,我了解到平台扩展意味着有一些 nuget 包,如果我添加到我的项目中,我将获得 100% 的兼容性。

问题是我怎么知道我应该安装哪些 nuget 包?我所能找到的只是这个页面,它只列出了一堆命名空间——如何确定我的项目需要哪些命名空间?

.NET 可移植性分析器结果

0 投票
2 回答
4622 浏览

c# - 为什么在根据 .NET Standard 编译 .NET Framework 项目时缺少此 NuGet 依赖项?

我有一个 Visual Studio 解决方案,有 3 个项目。

顶层是 .NET Framework 4.6.1 控制台应用程序(项目 A)。它依赖于 .NET Framework 4.6.1 类库(项目 B)。项目 B 依赖于 .NET Standard 2.0 类库(项目 C)。

我在项目 C 中有一些使用 System.Data.SqlClient(NuGet 包版本 4.6.1)的代码。

由于以下已知问题https://github.com/dotnet/sdk/issues/901,我还将 System.Data.SqlClient 作为 NuGet 依赖项添加到项目 B(.NET Framework 类库)。

这是场景一,当构建解决方案时,System.Data.SqlClient被复制到项目A的/bin/Debug文件夹中,应用程序运行成功。

场景 1 的代码在这里https://github.com/JamesDunlop/TestDependencyFlowsNetStandard

但是,对于场景 2,我现在添加了对项目 A 的项目引用,这样它现在也直接引用/依赖于项目 C(即 .NET 标准类库)以及项目 B。这模仿了我需要的内容在遗留应用程序中执行。

清理,重建并运行。项目 A 的 /bin/Debug 文件夹中现在缺少 System.Data.SqlClient,并且在运行时出现异常“System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Data.SqlClient”

为什么 System.Data.SqlClient 没有被复制到 /bin/Debug ?

请注意,我选择不将 .NET Framework 项目迁移到 PackageReferences 以解决问题https://github.com/dotnet/sdk/issues/901,因为我需要在大型旧版 ASP.NET 中实现这一点不可行的解决方案。

我希望添加对项目 C 的引用不会产生什么影响,除了(如观察到的那样)它会导致更多的类型转发 DLL 被复制到 /bin/Debug 文件夹。但我不希望 System.Data.SqlClient 现在丢失。

0 投票
0 回答
199 浏览

c# - C# 类库中的版本无关引用

我有一个 C# 类库MyLibrary,我在其中引用了sample.dll 版本 2.7.0。这个 MyLibrary 在 WCF 项目中被引用。哪个部署在服务器上。

现在在服务器上,我有版本 3.0.0的 sample.dll,因为我得到了以下引用的 dll not found 错误。

无法加载文件或程序集 'sample, Version=2.7.0.0, Culture=neutral, PublicKeyToken=185805eaf7302b6c' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

我发现很少有使其版本独立的解决方案,例如添加“BindingRedirect”,因为它是一个类库,我没有可以配置“BindingRedirect”的 web.config 或 app.config。我也尝试将“特定版本”设置为 false,但仍然出现相同的错误。

我想让我的类库可以与任何版本的 Sample dll 一起使用

我尝试在我的 WCF 项目的 web.config 中添加以下内容

但仍然得到同样的错误。

0 投票
1 回答
138 浏览

c# - C# 中有没有办法限制对间接引用的库/DLL 的调用?

我有一个以 3 层架构设计的项目。为了简单起见,我将在传统的 3 层中简化我的案例,Presentation -> Business Logic -> DAL

我在 3 个不同的项目中拥有这 3 层,因此我最终将拥有 1 个启动可执行文件和 2 个 DLL。但是,我发现我可以从表示层调用DAL 层,即使DAL 层项目没有直接被表示层项目引用。

我可以知道是否有任何方法可以限制这些间接引用调用?或者我可以确保其他开发人员无法拨打此类电话的任何方式?

0 投票
1 回答
113 浏览

c# - C#在子文件夹中引用dll

我不知道我做错了什么。

我的项目是这样的:

主要项目

子项目(引用我的愿望 DLL)

我有我的 app.config(MainProject):

我的编译存储库是这样的:

  • 调试
    • ConfigFiles\(app.config 中定义的所有 .config 文件)
    • ReferencesDLL\(子项目所需的所有DLL)
    • (所有其他编译文件:.exe、.dll 等。)

如您所见,我定义了我的 privatePath,但是在运行应用程序时,它找不到 SubProject 所需的 dll。(.config 文件没问题)我不知道我做错了什么:(。

0 投票
1 回答
57 浏览

c# - 我可以指定绝对位置吗..在 App.config 中

我正在为应用程序(ESRI ArcMap)开发一个加载项库。同时,我想使用 EF6 作为 DB Accessing。我的问题是应用程序每次执行时都会崩溃DbProviderFactories.GetFactory("Devart.Data.Oracle")并提示错误为Devart.Data.Oracle Failed to find or load the registered .Net Framework Data Provider.

我确信所有必需的库都与主加载项 DLL 放在同一个文件夹中。但是,主应用程序 exe 与加载项 DLL 不在同一个位置。似乎应用程序通过单独搜索加载项文件夹来加载其加载项 DLL。

我的观察是,DbProviderFactories.GetFactory仅在 exe 所在的文件夹中搜索提供程序 DLL。因此,它找不到位于加载项文件夹中的提供程序 DLL。我可以知道是否有任何方法可以指定在哪里DbProviderFactories.GetFactory搜索提供程序 DLL?

提前致谢。

0 投票
0 回答
80 浏览

asp.net - 在 ASP.NET 网站中找不到来自不同安装文件夹的 DLL 依赖项

我创建了一个带有 WCF 服务的 .NET Framework 4.7.2 网站。要通过此服务公开数据,我必须从 C:\InstallLocation 引用 Copy Local = False 的第三方 DLL。该网站在运行时加载此 DLL,但在访问 DLL 中要求它在同一 InstallLocation 文件夹中加载辅助 DLL 的功能时出现错误。我用 Process Monitor 验证了 W3WP.exe 在 C:\InstallLocation 中找到了主 DLL,但 W3WP.exe 根本无法在 C:\InstallLocation 中查找辅助 DLL。应用程序错误是预期的,

无法加载文件或程序集“[assembly-info-ommitted]”或其依赖项之一。该系统找不到指定的文件。

我还在控制台应用程序中测试了完全相同类型的引用,它没有问题。进程监视器显示在 C:\InstallLocation 中查找辅助 DLL 的可执行文件。

有没有办法配置 .NET Web 应用程序以允许进程在与引用的主 DLL 相同的目录中查找?我尝试了以下但没有(完全)成功:

  • 将 C:\InstallLocation 添加到我的系统路径(并重新启动)。好像没什么影响。我在应用程序启动时验证了添加的路径确实出现在 Environment.GetEnvironmentVariable("PATH") 中。
  • 将 C:\InstallLocation 移至我的 Web 根目录并尝试 <probing privatePath="CopiedLocation"。这解决了最初的 DLL 引用问题,但仍然显示错误,但依赖于不同的 DLL。我不认为这将是一个可行的解决方法。
  • 电影 C:\InstallLocation 到 bin 文件夹并注释掉。结果与上述相同。
  • 授予应用程序池用户对 C:\InstallLocation 的完全权限。用户:IIS APPPOOL\{网站名称}、IUSR、IIS_IUSRS

编辑

我已经实现了一个初始化程序,如此处所示,https://stackoverflow.com/a/16867088/2544926。我已更改代码以检查 C:\InstallLocation 中是否存在 DLL 以从该文件夹加载 DLL。从进程监视器的输出来看,这似乎让我更接近了。但是,我在此过程的后期看到了一个错误。这是我现在看到的错误(多级异常)。

'<Module>' 的类型初始化程序引发了异常。

在导致 C++ 模块加载失败的主要异常之后发生了嵌套异常。

'<Module>' 的类型初始化程序引发了异常。

C++ 模块在 vtable 初始化期间无法加载。

无法加载文件或程序集“XYZ,Version=NNNNN,Culture=neutral,PublicKeyToken=NNNNNNNNN”或其依赖项之一。该系统找不到指定的文件。

有趣的是,在我的自定义 Assembly Initializer 代码中,我看到 XYZ.DLL 是从 C:\InstallLocation 加载的。这个 C++ 模块是否可能试图以不同的方式或以 ASP.NET 不支持的方式加载它?

0 投票
1 回答
36 浏览

c++ - 如何添加对其他项目的 .lib 存根的引用

抱歉,如果以前有人问过这个问题,但我似乎找不到答案。

假设您在一个解决方案中有两个项目。一个被编译成 dll,并附带一个用于导出的 .lib。您想在其他项目中使用和引用该模块。

你能以某种方式在解决方案资源管理器中添加对 .lib 存根的引用吗?还是仅适用于静态库?谢谢您的帮助。

0 投票
0 回答
9 浏览

dll - 动态链接库 .Net 忽略参考路径

大家好,由于某种原因,我在运行时遇到了一些 Dll 问题,动态链接库正在加载错误的库,这破坏了我的依赖关系:

参考管理器中的参考:

在此处输入图像描述

动态加载器中的参考: 在此处输入图像描述

任何人都可以帮助我吗?

0 投票
0 回答
58 浏览

c# - 使用 C# 中的 C++ 库并将它们链接到同一个解决方案中

视觉工作室 2019 v 16.11.2

我有两个项目的解决方案。

项目 2 正在使用 c++ DLL 中的函数。

我发现我必须将 DLL 复制到 Console App exe 所在的同一文件夹中。我看到这可以通过 DLL 项目选项中的构建后命令行自动完成。或者可以在 C++ 应用程序中设置输出文件夹,将 DLL 放置在 CSharp 目录中。

我曾尝试使 DLL 项目成为 C# 项目的依赖项,但这会导致黄色三角形并且没有对黄色三角形的解释。

在此处输入图像描述

我还尝试通过浏览到已编译 DLL 的位置并选择它来添加引用,这会导致以下消息:

所以两个问题:

  1. 我如何找出或查看那些黄色三角形的含义?
  2. 手动(或在构建后脚本期间自动)复制 DLL 是在同一解决方案中链接的正确方法吗?