Multiple versions of same assembly dll in one process/directory










1















I'm trying to solve problem-related to the deployment of dll libraries, below assumptions:



  1. I have an application which loads plugins from dll-s.

  2. The product of my team is Wix installer that should install additional plugins to that application.

  3. We are using additional common dll libraries that are referenced in plugins from point 2 (for example Common.Forms). They may be used by
    more than one plugin.

  4. There may be a gap between the release of plugin A and B, both of them may refer to a different version of common libraries.

  5. Common libraries may refer to dll-s of Base application. Base application is not strongly named.

Issue:



If we try to install plugin A and then B, then the common library will be replaced with never version, which may be incompatible with plugin A. As a result plugin A won't work.



What I already tried



  1. GAC - version control based on the global cache, issues:

    • I cannot sign the Base application, nor load assemblies dynamically, so
      solution from:
      How to fix "Referenced assembly does not have a strong name" error?
      Won't work


  2. Fody costura - embedding common libraries in plugins

    • The prototype works as expected but we found two issues:

      • Costura will work only if dll was not found by Base Application, so if there is dll file that was installed with the previous plugin, and file exists in root directory - then it will be loaded instead of expected embedded version. That may be solved by renaming Libraries from given version to avoid conflicts.

      • This will require to add Cody fostura to all plugins and will require a lot of manual work with the setup.



I'm looking for an alternative approach to solve that issue, any help appreciated.










share|improve this question




























    1















    I'm trying to solve problem-related to the deployment of dll libraries, below assumptions:



    1. I have an application which loads plugins from dll-s.

    2. The product of my team is Wix installer that should install additional plugins to that application.

    3. We are using additional common dll libraries that are referenced in plugins from point 2 (for example Common.Forms). They may be used by
      more than one plugin.

    4. There may be a gap between the release of plugin A and B, both of them may refer to a different version of common libraries.

    5. Common libraries may refer to dll-s of Base application. Base application is not strongly named.

    Issue:



    If we try to install plugin A and then B, then the common library will be replaced with never version, which may be incompatible with plugin A. As a result plugin A won't work.



    What I already tried



    1. GAC - version control based on the global cache, issues:

      • I cannot sign the Base application, nor load assemblies dynamically, so
        solution from:
        How to fix "Referenced assembly does not have a strong name" error?
        Won't work


    2. Fody costura - embedding common libraries in plugins

      • The prototype works as expected but we found two issues:

        • Costura will work only if dll was not found by Base Application, so if there is dll file that was installed with the previous plugin, and file exists in root directory - then it will be loaded instead of expected embedded version. That may be solved by renaming Libraries from given version to avoid conflicts.

        • This will require to add Cody fostura to all plugins and will require a lot of manual work with the setup.



    I'm looking for an alternative approach to solve that issue, any help appreciated.










    share|improve this question


























      1












      1








      1








      I'm trying to solve problem-related to the deployment of dll libraries, below assumptions:



      1. I have an application which loads plugins from dll-s.

      2. The product of my team is Wix installer that should install additional plugins to that application.

      3. We are using additional common dll libraries that are referenced in plugins from point 2 (for example Common.Forms). They may be used by
        more than one plugin.

      4. There may be a gap between the release of plugin A and B, both of them may refer to a different version of common libraries.

      5. Common libraries may refer to dll-s of Base application. Base application is not strongly named.

      Issue:



      If we try to install plugin A and then B, then the common library will be replaced with never version, which may be incompatible with plugin A. As a result plugin A won't work.



      What I already tried



      1. GAC - version control based on the global cache, issues:

        • I cannot sign the Base application, nor load assemblies dynamically, so
          solution from:
          How to fix "Referenced assembly does not have a strong name" error?
          Won't work


      2. Fody costura - embedding common libraries in plugins

        • The prototype works as expected but we found two issues:

          • Costura will work only if dll was not found by Base Application, so if there is dll file that was installed with the previous plugin, and file exists in root directory - then it will be loaded instead of expected embedded version. That may be solved by renaming Libraries from given version to avoid conflicts.

          • This will require to add Cody fostura to all plugins and will require a lot of manual work with the setup.



      I'm looking for an alternative approach to solve that issue, any help appreciated.










      share|improve this question
















      I'm trying to solve problem-related to the deployment of dll libraries, below assumptions:



      1. I have an application which loads plugins from dll-s.

      2. The product of my team is Wix installer that should install additional plugins to that application.

      3. We are using additional common dll libraries that are referenced in plugins from point 2 (for example Common.Forms). They may be used by
        more than one plugin.

      4. There may be a gap between the release of plugin A and B, both of them may refer to a different version of common libraries.

      5. Common libraries may refer to dll-s of Base application. Base application is not strongly named.

      Issue:



      If we try to install plugin A and then B, then the common library will be replaced with never version, which may be incompatible with plugin A. As a result plugin A won't work.



      What I already tried



      1. GAC - version control based on the global cache, issues:

        • I cannot sign the Base application, nor load assemblies dynamically, so
          solution from:
          How to fix "Referenced assembly does not have a strong name" error?
          Won't work


      2. Fody costura - embedding common libraries in plugins

        • The prototype works as expected but we found two issues:

          • Costura will work only if dll was not found by Base Application, so if there is dll file that was installed with the previous plugin, and file exists in root directory - then it will be loaded instead of expected embedded version. That may be solved by renaming Libraries from given version to avoid conflicts.

          • This will require to add Cody fostura to all plugins and will require a lot of manual work with the setup.



      I'm looking for an alternative approach to solve that issue, any help appreciated.







      c# .net vb.net visual-studio dll






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 15 '18 at 8:06







      mjpolak

















      asked Nov 14 '18 at 12:24









      mjpolakmjpolak

      366315




      366315






















          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53300187%2fmultiple-versions-of-same-assembly-dll-in-one-process-directory%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53300187%2fmultiple-versions-of-same-assembly-dll-in-one-process-directory%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          這個網誌中的熱門文章

          Barbados

          How to read a connectionString WITH PROVIDER in .NET Core?

          Node.js Script on GitHub Pages or Amazon S3