每次更改用户应用程序时,都需要将程序集重新部署到GAC中

所以基本上我们有一个强名称(强烈签名)程序集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     
已邀请:
为什么要将其安装到GAC中?不要那样做。 您的问题“大会需要重新部署到GAC”的标题是错误的。 您编写的任何内容都不意味着程序集需要在GAC中。 编辑 - 一些额外的信息。 如果要检查依赖关系,可以使用Redgate的Reflector检查程序集(如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版本。     

要回复问题请先登录注册