【问题标题】:Assembly needs to be redeployed into GAC every time its user app is changed每次更改其用户应用程序时,都需要将程序集重新部署到 GAC
【发布时间】:2010-12-28 13:55:31
【问题描述】:


所以基本上我们有一个强名称(强签名)程序集 x.dll,它由我们的组件之一 App.exe 使用。程序集的签名密钥在我们的存储库中,并且程序集是通过书写方式签名的

[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFileAttribute(@"..\..\xxx.snk")]
[assembly: AssemblyKeyName("")]

该程序集应该由一些安装通用软件包的安装程序放入 GAC,我们将其命名为 common.msi。但是我们的组件本身是由 App.msi 安装的。一起部署时,一切正常。但是当对 App.msi 进行更改时,那些与 x.dll 完全无关的,并且重新部署 App.msi,App.exe 无法找到 x.dll。请注意,不会对 x.dll 进行任何更改。但是,当也部署 common.msi 时,一切正常。所以我猜肯定存在构建版本或其他东西的问题,或者我一无所知的清单。有什么明显的我做错了吗?是不是可以单独部署组件而不触摸它,除非它被更改并且每次使用它的组件发生更改时都不会重新部署它?谢谢。

编辑:将程序集放入 GAC 是一项要求(我对此无能为力)

【问题讨论】:

    标签: c# .net deployment global-assembly-cache strongname


    【解决方案1】:

    为什么要将它安装到 GAC 中?不要那样做。

    您的问题“需要将程序集重新部署到 GAC”的标题是错误的。 您所写的任何内容都没有暗示程序集需要在 GAC 中。


    编辑 - 一些附加信息。

    如果您想检查依赖关系,您可以使用 Redgate 的反射器检查程序集,例如您的 App.exe,以确定它依赖和需要哪些其他程序集。这些依赖项将包括版本号。

    我不知道命令行中会发出汇编信息的工具。也许有一个。缺少这个,我写了一个工具来做,像这样:

        public static void Main(string[] args)
        {
            if ((((args == null) || (args.Length != 1)) || (args[0] == "-?")) || (args[0] == "-h"))
            {
                Usage();
            }
            else
            {
                try
                {
                    Console.WriteLine(Assembly.LoadFrom(args[0]).FullName.ToString());
                }
                catch (Exception exception)
                {
                    Console.WriteLine("Exception: {0}", exception.ToString());
                    Usage();
                }
            }
        }
    

    您可以在 App.exe 和 x.dll 上运行此工具,以确定嵌入到每个程序集中的确切强名称,包括版本号。

    这可能有助于您深入了解为什么事情没有按您的预期工作。

    即使 GAC 中有一个版本的 x.dll,也没有必要让 App.exe 等任意应用程序使用该版本的 DLL。该应用程序可以在本地目录中安装它自己的 dll 版本。

    【讨论】:

    • 这是一个要求,我不能改变它。假设该组件也将被其他组件使用。不幸的是,您的回答没有回答任何问题
    • “被其他组件使用”不是安装到 GAC 的正当理由。你做错了!
    • 一个组件不一定要在 GAC 中才能被其他组件使用。它只需要在同一个目录中。
    • @Cheeso, @Femaref:要求是在使用它的不同组件的文件夹中不能有相同组件的不同副本。
    • @Cheeso:这不是我的决定。这是一个我无能为力的要求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多