问题标签 [assemblies]

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 投票
3 回答
516 浏览

.net - 团队成员之间的项目装配引用

我很想知道您在项目参考中使用什么类型的结构?

在我工作的地方,开发人员有一个名为 AssemblyCache (\\MACHINENAME\AssemblyCache) 的共享文件夹,该文件夹通过 Windows 2008 AD 中的 GPO 映射到 R:\(与 Developers AD 组相关联)。

我们的共享组件具有构建后事件,将它们复制到如下内容:

R:\.Net %VERSION%\Project\%SOMETHING%

有时,如果它对项目或特定的东西是共同的,那么它后面会跟着“Common”。.Net 版本文件夹下还有一个用于共享内容的公共目录。

这是多个解决方案上的大型项目可以从一个共同的地方引用程序集。

构建机器还有一个共享驱动器,其共享名称与开发人员映射到 S: 的共享名称相同。这使他们能够在需要时获得最新的工作版本。

所有这些都是为了让某人可以在一台新 PC 上打开一个项目,而不必将引用复制到不同的位置,并确保 dev a 从与 dev b 相同的位置引用程序集等......

这个解决方案对我们很有效,所以我想知道您有什么解决方案(如果有的话)可以确保所有开发人员从同一路径引用程序集?

0 投票
2 回答
2965 浏览

.net - .NET assemblies and DLL rebasing

According to this article rebasing is not necessary for .NET assemblies due to JIT compilation of the code. The article states:

"JIT-compiled code does not have a rebasing problem since the addresses are generated at run time based on where the code is placed in memory. Also, MSIL is rarely affected by base address misses since MSIL references are token-based, rather than address-based. Thus when the JIT compiler is used, the system is resilient to base address collisions."

However, I have noticed that VS2008 assigns the default 0x0400000 base address to all assemblies (project properties > build > advanced) and if I do a listdlls /r for my process all my .NET assemblies are in fact rebased per default.

If I assign addresses myself, no rebasing is done.

My question is: What is rebased in this case and why?

EDIT: I should add that I am not talking about NGen'ed assemblies.

0 投票
4 回答
14672 浏览

visual-studio - Visual Studio 如何确定使用多项目解决方案将哪些内容复制到输出目录?

假设我们有一个具有以下结构的解决方案:

  • Project.DAL - 数据访问层,依赖于较低级别的库,例如 Oracle.DataAccess w/copy local = true
  • Project.BLL - 业务逻辑层,引用 Project.DAL 作为项目
  • Project.UI - UI 层,编译为可执行文件,引用 Project.BLL,默认项目

编译 Project.UI 时,VS 足够聪明,可以将 Project.DAL.dll 复制到输出目录,但它不够聪明,无法弄清楚我希望将 Oracle.DataAccess 复制到输出目录以及分发给客户端.

谁能解释为什么会这样?是因为它在 GAC 中看到 Oracle.DataAccess 并假设客户端也会在 GAC 中拥有它吗?

这没什么大不了的,但是每次我添加一个新的程序集引用时,我都必须记住将它设置为复制本地并添加一个项目以在我的构建脚本中复制它,这有点烦人。

0 投票
7 回答
13991 浏览

c# - 如何确定 DLL 是托管程序集还是本机(防止加载本机 dll)?

原标题:如何防止从 .NET 应用程序加载本机 dll?

背景:

我的 C# 应用程序包括一个插件框架和通用插件加载器。

插件加载器枚举应用程序目录以识别插件 dll(本质上它此时搜索 *.dll)。

在同一个应用程序目录中是一个本地(Windows,非 .net)dll,它间接依赖于插件 dll 之一。

插件加载器盲目地假设 native.dll 是一个 .NET 程序集 dll,仅仅是因为它只检查文件扩展名。当它尝试加载本机 dll 时,会引发异常:

“无法加载文件或程序集‘native.dll’或其依赖项之一。该模块应包含程序集清单。”

如果插件加载失败,我基本上会创建一个诊断报告,所以我试图避免让这个日志充满关于无法加载本机 dll 的消息(我什至不想尝试)。

问题:

是否有一些 .NET API 调用可用于确定二进制文件是否恰好是 .NET 程序集,以便我根本不尝试加载本机 dll?

也许从长远来看,我会将我的插件移动到一个子目录,但现在,我只想要一个不涉及在我的插件加载器中硬编码“native.dll”名称的解决方法。

我想我正在寻找某种我忽略的静态 Assembly.IsManaged() API 调用......大概不存在这样的 API?

0 投票
5 回答
7409 浏览

.net - 可以使用强命名程序集来验证程序集作者吗?

我一直在阅读 MSDN 中的正确文章,Strong-Named Assemblies和相关的 Stack Overflow 问题,Checking an assembly for a strong name

  1. 可以在多大程度上验证强名称程序集以避免篡改?
  2. 是否可以使用强命名来验证程序集作者?

第一个问题出现在阅读 CSharp411 文章.NET Assembly FAQ – Part 3 – Strong Names and Signing之后,其中提到了这一点,以及使用强名称的其他问题:

"无法停止完全替换。强名称无法阻止黑客删除强名称签名,恶意修改您的程序集,用自己的密钥重新签名,然后将他的程序集冒充为您的。 "

第二个问题旨在找出强命名和其他签名方案(例如Authenticode )之间的区别。同一篇 MSDN 文章提到了早期状态:

"但是请注意,强名称本身并不意味着像数字签名和支持证书所提供的那样的信任级别。 "

我是否试图将强命名用于比创建它时更多的用途?创建强命名是为了避免名称冲突还是一种新的“GAC DLL Hell”?

0 投票
2 回答
2094 浏览

.net - 从 2.0 应用程序引用 3.5 程序集?

我有一个针对 .NET 3.5 的程序集。

我有一个针对 .NET 2.0 的应用程序,想知道从 2.0 应用程序引用 3.5 程序集是否有任何问题。

我知道 IL 应该是相同的,所以我假设它会起作用,但想听听其他尝试过这个的人的一些经验。

运行时环境将安装 2.0 和 3.5。

0 投票
3 回答
1538 浏览

c# - 如何仅将签名程序集加载到新的 AppDomain?

我正在做一个插件系统,其中主应用程序在新 AppDomain 的运行时加载程序集 Addin1.dll 和 Addin2.dll。

但是,如果 Addin1.dll 使用我的密钥签名(强名称)而 Addin2.dll 没有,我希望能够只加载 Addin1.dll 并拒绝 Addin2.dll。

我怀疑需要通过在 AppDomainSetup 中设置一些参数来完成?

0 投票
2 回答
142 浏览

.net - 从 Internet 加载依赖程序集是一种好习惯吗?

我知道有几种方法可以部署 .net windows 客户端应用程序:

Windows Installer , Click Once , 一个简单的下载 & 运行, 并在 Internet Explorer 中加载 windows 窗体/WCF 应用程序 (不要将后者与 WCF/E - Silverlight RIA 应用程序混淆)

所以...考虑一下真正的 Windows 客户端应用程序——只是为了明确一点:那些在你的文件系统中由 .exe 组成的应用程序——可以从 Internet 加载其部分或全部依赖项是一个好主意吗?

显然有一些严重的缺点:必须始终连接,客户端中的CAS配置(互联网依赖项将在Internet_Zone 代码组中),更不用说加载时间了。

但我也能想到几个优点。

有哪些问题?有人在实际项目中使用过这个吗?

0 投票
3 回答
8614 浏览

.net - .NET 中的部分受信任的程序集/应用程序/代码/等是什么?

有人可以解释一下吗?我在互联网上找不到任何东西,所有内容都在谈论如何以某种方式进行,但没有确切说明它是什么。

此外,什么是完全受信任的程序集,它们之间有何不同?

我有一个 MS 认证考试,这是我唯一不明白的话题。

编辑:谢谢大家。现在我对 .NET 中的安全性有了更好的理解。我能够通过我的认证考试。

0 投票
3 回答
18820 浏览

asp.net - ASP.NET 网站的 BIN 目录和参考资料

想象一下以下解决方案:

  • 网站 ABC.com(不是 Web 应用程序)
  • BLL(单独程序集中的业务逻辑层)
  • DTO(自己程序集中的 dto 对象)
  • DAL(它自己的程序集中的数据访问层)。

    1. BLL 引用了 DAL。
    2. BLL 具有对 DTO 层的引用。
    3. 网站项目引用了 BLL。

编译网站工程时,BIN目录下会出现以下DLL:
BLL.dll
DTO.dll
DAL.dll

当一个人去预览站点时,会发生一个错误,因为没有必要的程序集引用......现在如果右键单击网站项目,添加引用,并明确添加对缺少的程序集的引用,它会正常工作。

在我看来,ASP.NET 提取了在网站中添加/引用的引用程序集的引用程序集。

为什么需要对引用的引用添加显式引用...?抱歉,如果我的措辞不正确或令人困惑。