【问题标题】:When I make a project reference in Visual Studio, do I then have to include the DLLs for those projects when I deploy?当我在 Visual Studio 中进行项目引用时,我是否必须在部署时包含这些项目的 DLL?
【发布时间】:2010-01-28 20:01:43
【问题描述】:

我有一个控制台应用程序和两个类库项目。

控制台应用程序必须投射对类库项目的引用。

当我构建时,它会为这两个项目生成 DLL。我必须将这些包含在我的控制台应用程序 exe 文件中吗?有没有办法让我不必包含这 2 个 dll?

理想情况下,我想要一个 exe。

【问题讨论】:

    标签: c# .net deployment dll


    【解决方案1】:

    您必须包含任何引用的程序集,因为它们是您的应用程序的依赖项。

    话虽如此,Microsoft 提供了一个名为 ILMerge 的工具,可让您将依赖程序集与您的可执行文件结合起来,创建一个包罗万象的可执行程序集,然后将其发送给客户。

    【讨论】:

      【解决方案2】:

      查看ILMerge

      【讨论】:

        【解决方案3】:

        您可以使用ilmerge 将程序集合并为一个,否则您必须部署exe 文件和dll。 例如你可以运行类似的命令

        ilmerge /target:winexe /out:MyProg.exe Program.exe ClassLib1.dll ClassLib.dll
        

        Visual Studio 没有提供执行此操作的内置方法,因此您必须手动运行上述命令,作为 Post Build 事件,或者手动将其添加到您的 .csproj 文件中。

        【讨论】:

          【解决方案4】:

          您应该能够通过选择您的引用并将“复制本地”属性设置为 false 来完成。

          【讨论】:

          • 这会将 .dll 复制到(例如)Debug/ 输出文件夹中,您仍然需要在分发应用程序时发送 dll 和 exe。
          • 这就是我为我的二进制 WinForms 应用程序所做的。
          • @nos:这对我来说不是这样。也许我只是个怪胎,但我有一个 WinForms 可执行文件,在本地项目中有 8 个引用,都将 Copy Local 设置为“false”。我只部署 .exe,它就像一个魅力。
          • 那是因为它将这些信息嵌入到项目中。如果您为应用程序定义连接字符串而不是使用 app.config / web.config 文件,则会发生这种情况。
          • @JonH:试一试。如果您有配置信息,您仍然需要提供单独的配置(但这可以使用已编译的 .resx 文件解决)。我只是验证了它,因为你们让我认为我疯了。我刚刚将一个带有配置的 exe 发送到一个从未见过这个应用程序的服务器(我想我的成功可能被 GAC 中的文件所掩盖,但事实并非如此),它运行得非常好。
          【解决方案5】:

          谨慎使用 ILMerge,并确保您了解走这条路线的性能影响。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-17
            • 2013-12-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多