标签: assemblies

强制从/ bin而不是GAC加载程序集?

我有两个程序集,通过条件编译(dev和real)创建.

这些组件的公共表面是100%相同的:两者都有很强的名字; 两者都签署相同.snk,因此具有相同PublicKeyToken; 两者都有相同的文化和相同的版本.我无法改变这一点:使它们看起来完全相同是重点.

但是,在我的机器上,真正的程序集在GAC中.我有一个引用开发组件的ASP.NET 3.5 WebForms应用程序.绝对必须这样做; 真正的程序集崩溃了应用程序.

有没有办法强制特定的ASP.NET应用程序使用dev one(在...中/bin),给定:

  • GAC中有一个.
  • 两者都有相同VersionPublicKeyToken.
  • 两者都使用相同的密钥进行强名称/签名.
  • 我无法更改它们,无法更改版本,也无法删除密钥.

我注意到有人已经在#991293中询问了这个问题,但接受的答案涉及删除签名,这不是一个选项.

我运气不好吗?

.net asp.net assemblies

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

程序集的ASP.NET错误

您好我正在创建一个ASP.NET/C#网站,我想使用Ajax Toolkit程序集.我把它添加到"参考文献"中.

Default.aspx我有这个:

<%@ Page Title="My_Website" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" ViewStateMode="Enabled" CodeBehind="Default.aspx.cs"
Inherits="My-Website._Default" %>

<%@ Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" Assembly= "AjaxControlToolkit"%>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<ajaxToolkit:ComboBox ID="ComboBox1" runat="server" />
</asp:Content>
Run Code Online (Sandbox Code Playgroud)

设计选项卡中,我可以看到组合框,一切都很好.但是当我尝试调试应用程序时,我收到此错误:

找不到适合指定文化或中性文化的资源.确保在编译时将"AjaxControlToolkit.Properties.Resources.NET4.resources"正确嵌入或链接到程序集"AjaxControlToolkit"中,或者所有所需的附属程序集都是可加载和完全签名的.

c# asp.net assemblies

27
推荐指数
1
解决办法
3万
查看次数

获取Silverlight程序集的运行时版本

我想在about框中显示我的Silverlight 3应用程序的版本号,但是当我使用传统的.Net调用时:

Assembly.GetExecutingAssembly().GetName().Version;
Run Code Online (Sandbox Code Playgroud)

我在GetName()调用上得到一个MethodAccessException.我怎么能得到我的装配版本号?

.net versioning silverlight assemblies version

26
推荐指数
2
解决办法
8959
查看次数

AppDomain.CurrentDomain.AssemblyResolve要求<AppName> .resources程序集?

使用代码如何将附属程序集嵌入到 csharptest.net提供的EXE文件中,我创建了一个自定义程序集解析程序并在我的资源中嵌入了我的程序集.

我可以成功解析我使用的程序集,但不知怎的,AppDomain.CurrentDomain.AssemblyResolve请求一个名为'AppName.resources'的程序集,特别是"MyProgram.resources,Version = 0.15.3992.31638,Culture = en-US,PublicKeyToken = null"不知道如何解决?

我试图禁用从资源加载我的自定义程序集(将所有程序集dll放在程序目录中)并启用AppDomain.CurrentDomain.AssemblyResolve,但它仍然要求它.

我对此感到有点困惑,如果你可以帮助我,我会非常感激.

这是我感兴趣的代码;

static Assembly ResolveAssemblies(object sender, ResolveEventArgs args)
{
    Assembly assembly = null;
    string name = args.Name.Substring(0, args.Name.IndexOf(','));
    if (name == "MyProgram.resources") return null;
    else name = string.Format("MyProgram.Resources.Assemblies.{0}.dll", name);

    lock (_loadedAssemblies)
    {
        if (!_loadedAssemblies.TryGetValue(name, out assembly))
        {
            using (Stream io = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
            {
                if (io == null)
                {
                    MessageBox.Show("MyProgram can not load one of it's dependencies. Please re-install the program", string.Format("Missing Assembly: {0}", name), MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Environment.Exit(-1); …
Run Code Online (Sandbox Code Playgroud)

c# assemblies assembly-resolution

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

在汇编中嵌入Intellisense Xml文档?

我有一个包含非常全面的基于XML的文档的程序集,它通过Sandcastle用于生成产品的帮助文件.当程序员明显使用程序集时,我们还使用输出XML文件在Visual Studio中提供正确的Intellisense.

为了做到这一点,我们似乎已经为用户提供了程序集("assembly.dll")和文档("assembly.xml").

是否有可能将文档嵌入到程序集中,因此我们只需提供单个程序集文件,Visual Studio就能提取信息?也许嵌入资源或类似的东西?

xml documentation intellisense assemblies visual-studio

25
推荐指数
2
解决办法
6264
查看次数

如何确定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存在?

c# dll plugins assemblies native

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

在装配加载时初始化库

我有一个.net库dll,就像一个函数库.有许多静态类型和静态方法.

我需要运行一些初始化代码来设置库以供使用.

当程序集加载时,是否有办法确保运行特定方法?像AppDomain.AssemblyLoad之类的东西,但是从程序集本身自动调用.我在想,也许有可能会使用像AssemblyAttribute这样的东西?

目前我在静态构造函数中有这个初始化代码,但由于这是一个包含许多入口点的库,因此无法保证将使用此特定类型.

谢谢!

.net c# assemblies

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

.NET程序集差异/比较工具 - 有什么可用的?

我希望能够在两个程序集之间进行代码级差异; Reflector的Diff插件是迄今为止我发现的最接近的东西,但要比较整个程序集是一个手动过程,需要我深入到每个命名空间/类/方法.

到目前为止,我发现的其他工具似乎仅限于API级别(命名空间,类,方法)的差异 - 这些工具不会因为我正在寻找的东西而削减它.

有谁知道这样的工具?我的要求(从最高到最低)是:

  • 能够分析/反映同一装配的两个版本的代码内容并报告差异
  • 接受一个文件夹或一组程序集作为输入; 快速比较它们(类似于WinMerge的文件夹差异)
  • 快速确定两个程序集在代码级别(而不仅仅是API)上是否等效的快速能力
  • 允许轻松向下钻取以查看差异
  • 导出有关差异的报告

(我个人喜欢WinMerge的文本差异,所以具有类似界面的应用程序会很棒)

.net diff assemblies

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

阅读WPF应用程序的汇编版本信息

我正在阅读我的wpf应用程序的版本信息,但我没有得到正确的版本,因为我已经写入AssemblyInfo.cs文件.在我的文件中有

[assembly: AssemblyVersion("0.1.001")]
[assembly: AssemblyFileVersion("0.0.001")]
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码阅读版本信息

 System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
Run Code Online (Sandbox Code Playgroud)

我得到这个版本0.1.1.0,它应该是0.1.001

谢谢

c# wpf assemblies version

25
推荐指数
1
解决办法
3万
查看次数

C#命名空间和程序集最佳实践

C#:在将解决方案划分为名称空间和程序集时,是否有任何指导方针和最佳实践?名称空间通常应该嵌套,顶层名称空间中的最低级别和基础类是什么?一个程序集通常应该有一个名称空间吗?在一个名称空间中有多个程序集或在一个程序集中有多个名称空间是他们的任何陷阱.多个组件或非常大的组件是否有编译时/运行时间的惩罚?

c# assemblies namespaces

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