【问题标题】:Packing multiple web projects into single Nuget package将多个 Web 项目打包到单个 Nuget 包中
【发布时间】:2019-11-06 11:58:13
【问题描述】:

我负责一个有 3 个项目的框架:

Front End UI
    \bin
        \my front end dlls
    \images
        \theimages.png

API
    \bin
        \my API dlls

Database Migrations
    \bin
        \my migration dlls

我在 IIS 中的设置/结构如下:

Front End UI (Top level IIS Site)
    \bin
        \my front end dlls
        \Database Migrations
            \my migration dlls
    \images
        \theimages.png

    \API (Converted to an App in IIS)
        \bin
            \my API dlls

我希望我的 nuget 包输出到这个结构。

用户将在 Visual Studio 中创建一个新的空白项目,并添加此 nuget 包。这将为他们提供如上面 IIS 位所示的结构。他们只会在这个新项目中添加几个配置文件。

然后他们将在 IIS 中创建一个新站点,将其指向前端,并将 API 文件夹转换为应用程序。

应该很容易设置。

我的问题是我可以创建一个 nuspec 文件,并将 API 和 Migrator 文件手动包含到 content\API\bincontent\bin\Database Migrators 但问题是默认的 .gitignore 文件将默认排除这些子 bin 文件夹,这些 dll 不会被提交。

如果可能的话,我真的希望避免让开发人员调整 .gitignore 文件以强制包含 API\binDatabase Migrators\bin 文件夹。

有没有更好的方法来做我正在做的事情?

干杯,

【问题讨论】:

  • 嗨 Albert,这个问题有什么更新吗?现在没有简单的方法来实现你想要的,我能问你为什么要提交 dll 吗?据我所知,在大多数情况下,不需要将输出程序集添加到版本控制中...... :-(
  • 情况是我要提交的dll不是这个项目的输出dll。它们只需要运行 IIS 站点。它们也不是对这个项目的引用。所以我所做的基本上是打包我的整个 IIS 站点,当开发人员克隆并安装 nuget 包时,他们会得到一个工作站点。 dll 仅在安装 nuget 包时复制到 API\bin 文件夹,因此只有我将它们放在正确的位置。克隆时,它们不会再次复制...
  • 嗨 Albert,这个问题有什么更新吗?我遇到了one issue,其中有一个很好的包,它使用 msbuild 目标在其中执行许多自定义工作,也许您可​​以在那里获得一些有关如何使用目标创建包的有用信息。如果您仍然被阻止,请随时告诉我..

标签: git visual-studio nuget


【解决方案1】:

有没有更好的方法来做我正在做的事情?

恐怕答案是否定的,默认情况下,如果您将解决方案添加到 Visual Studio 中的源代码管理,VS 中的 git 组件将在 solution directory 中创建 .gitignore 文件,其中包含默认内容 [Bb]in/。 (至少对于VS2017+VS2019)

所以它总是忽略解决方案目录中的所有bin/Bin/ 目录。据我所知,如果您想将子 bin 文件夹包含到源代码管理中,您必须修改 .gitignore 文件。

另外:说实话,我不知道你为什么需要提交dll,我猜你将程序集从三个项目的输出bin文件夹复制到content\bin\Database Migratorscontent\API\bin,在这种情况下,不需要将那个 sub-bin 文件夹添加到源代码管理中。

除了使用content\bincontent\API\bin,您还可以考虑使用using targets file when creating nuget package。您可以在该文件中指定许多操作,它将在构建使用该包的项目时执行。因此,您可以在其中定义 copy task 以将程序集从 nuget 复制到您在使用该包的项目中想要的位置。但这可能要复杂得多,我认为这不是你想要的更好的方式:(

【讨论】:

  • 您好,感谢您的回复。我需要提交 dll,以便其他开发人员克隆时,他们可以获得完整的设置,否则他们永远不会在适当的位置获得 dll(在此示例中为 API\bin)。我将检查复制目标,看看我是否可以直接从 nuget 包位置对构建时的正确位置进行复制操作,这可能是一个很好的解决方案,因为我不需要提交dll,我不需要在 .gitignore 文件中添加特殊规则。感谢您的提示!
  • 嗨 Lance,我终于设法再次查看了这个。我将使用自定义构建目标路线。那是个好主意。我找到了这个 SO 帖子,它解释了它并给出了这个答案:stackoverflow.com/a/30668355/182888。感谢您查看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2017-06-27
  • 2018-06-10
相关资源
最近更新 更多