如何从预构建操作创建 .mdf 文件

问题描述 投票:0回答:1

因此,在 Visual Studio 中,我在 GitHub 上有一个项目,其 app_data 目录中有一个 mdf 文件。

关于源代码控制和构建,我如何处理这个 .mdf 文件?

糟糕的解决方案 1 - 签入空的 .mdf 文件

我可以创建一个存根 mdf 并将其签入。但我不喜欢这个解决方案。一旦我签入,那么每次更改都会显示为已更改,并且我必须在每次后续签入时排除 .mdf。更糟糕的是,如果我忘记排除它,那么我必须恢复签入。

糟糕的解决方案 2 - 忽略 *.mdf 文件

我可以忽略 mdf 文件。但是现在,当有人检查我的解决方案并单击构建时,构建失败。 手动创建 SQL 文件非常容易。但前提是你知道那是你应该做的。 此外,许多潜在用户/贡献者可能会查看我的开源项目,单击构建,看到它失败,然后决定继续前进。

目前我正在使用错误的解决方案1。

平庸的解决方案 1 - 复制另一个签入的文件

将 mdf 文件签入到项目中的某个位置。 运行复制命令。 我可能不得不接受这个选择。 我希望这只是一个脚本想法。

更好的解决方案 - 如果缺失,则预构建操作来构建 mdf 我正在努力实施这个解决方案。

在 Visual Studio 项目的预构建操作中,我有以下内容:

IF NOT EXIST "$(ProjectDir)App_Data\SqlRepository.mdf" (
    REM Command to create SqlRepository.mdf here
)

但是 Visual Studio 正在添加 *.mdf。如果文件丢失,应该有一个脚本来创建存根。 Visual Studio 在做什么?

因此,有效的答案将包括:

  1. mdf 未签入
  2. 不是另一个签入文件的文件副本
  3. 脚本构建 mdf(如果不存在)
  4. 脚本并不太复杂
  5. 适用于几乎所有其他 Windows + Visual Studio 环境
c# visual-studio mdf prebuild
1个回答
0
投票

所以我的建议是使用平庸的解决方案#1。

  1. 从源代码管理中排除 mdf。
  2. 创建模板文件夹
  3. 将 mdf 文件放入 templates 文件夹中并签入。
  4. 在重建中添加 Windows 复制命令以检查 mdf 文件是否存在,如果不存在,则从模板文件夹中复制它。
    <Exec Condition="'$(OS)' == 'Windows_NT'" Command="YOUR COPY COMMAND HERE" />
  5. 在重建中添加*nix复制命令以检查mdf文件是否存在,如果不存在,则从模板文件夹中复制它。
    <Exec Condition="'$(OS)' != 'Windows_NT'" Command="YOUR COPY COMMAND HERE" />

我以为我最近找到了更好的解决方案,但我没有。我正在学习项目和项目模板以及它们的新 dotnet 版本。无论如何,要在 Visual Studio 中添加 MDF 文件,我可以右键单击文件夹,选择“添加”|“新建项目...,然后选择基于服务的数据库。这意味着它是一个项目模板。所以我在项目模板中搜索并找到了这个:

C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\ItemTemplates\CSharp\Data\1033\EmptyDatabase\Database.mdf

所以我现在可以只使用复制命令。然而,这并不比平庸的解决方案 #1 更好。此解决方案存在问题:

  1. 构建代理未安装 Visual Studio。平庸的解决方案#1 对此仍然有好处。
  2. 如果 Visual Studio 安装在“C:\Program Files”以外的位置怎么办。
  3. 支持Linux/Mac怎么样?该文件不会出现在这些系统上。
© www.soinside.com 2019 - 2024. All rights reserved.