【问题标题】:VS2013 Database Project without generating dllVS2013数据库项目不生成dll
【发布时间】:2014-04-21 17:58:34
【问题描述】:

如何在VS2013数据库项目中禁用生成dll?

我根本不使用 SQLCLR。

【问题讨论】:

  • 无法禁用此功能,但我很感兴趣 - 为什么要禁用 DLL 生成?在构建期间会生成 .dacpac 和 .dll 文件,但您可以忽略 .dll,除非您使用的是 SQLCLR。我想不出这样做有什么性能好处,而且生成的文件只有 4KB。我在这里缺少什么吗?
  • 我要补充一点,我想忽略 dll 以简化创建自动化部署。我们有一个包含 10 个数据库的项目和几个单独的 SQLCLR 项目。因此,在设置部署工件时,我不能只忽略 .dll,因为需要其中的几个。但我试图不明确定义它们。如果我不能构建数据库 .dll,那么我可以将任何其他文件复制到部署中。唉,数据库之间有很多引用,因此我必须创建 .dll 并明确定义我实际需要的任何内容。

标签: sql-server database visual-studio-2013 sqlclr sql-server-data-tools


【解决方案1】:

假设目标只是在输出文件夹中不包含 DLL(例如 \bin\{configuration})以及 .SQL 和 .DACPAC 文件,这是防止这种情况的最简单方法似乎在项目的 .sqlproj 文件中的主要 <PropertyGroup> 元素下添加了以下 XML 元素:

<CopyBuildOutputToOutputDirectory>false</CopyBuildOutputToOutputDirectory>

DLL 在技术上仍然是生成的,但发生在 \obj\{configuration} 文件夹中。

编辑:
如果您还想防止 PDB 文件被复制到输出文件夹中,请在上述相同位置使用以下元素:

<CopyOutputSymbolsToOutputDirectory>false</CopyOutputSymbolsToOutputDirectory>

【讨论】:

  • 这样做会禁用构建,这意味着不会创建 Dacpac 文件 - 这意味着在发布时使用项目的过期版本,我认为这不是什么想要这里
  • @KevinCunnane:很公平,感谢您至少给出了反对票的理由(假设是您),而不是让它看起来是随机的。有一种方法可以做到这一点而不会干扰其他任何事情。我只需要测试它。我会尽快用正确的方法更新我的答案。顺便说一句,我也质疑这样做的原因,但是,这是可能的,并且可能有不想要它的正当理由。
  • @KevinCunnane:答案已更新,因此构建仍会进行并创建 .dacpac 文件。
  • 谢谢,我已经删除了反对票,因为您已经用有效的答案更新了它。我对 up/downvoting 有点陌生,我并不是要让它看起来很苛刻,这只是最初的答案可能会在部署时引起真正的问题。
  • DLL 未复制到 bin。但是pdb还是复制到bin
【解决方案2】:

SSDT 必须生成一个 dll 作为 MSBuild 密钥输出,以使其他项目类型能够引用 SSDT。不幸的是,VS 中的许多项目系统假设它的引用会生成一个 dll,并且当它们没有发生不幸的事情时。

【讨论】:

  • 您的答案与接受的答案有何关系,因为 DLL 不会复制到输出中。
  • @JohnSaunders 虽然接受的答案似乎已满足 OP 的要求,但问题明确指出“不生成 dll”。即使接受的答案仍然会生成一个 dll,Patrick 只是在解释为什么需要 dll。
  • @Patrick Sirr 您的评论可能会解决我的问题。我正在添加一个数据库引用,但没有生成 dll,这导致未解析的引用。我需要做什么?
【解决方案3】:

你可以添加

del $(TargetPath)

到数据库项目中的构建后事件。

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多