强制 Visual Studio 在嵌入式资源更改时重新构建

19
我们有一个SQL文件作为解决方案的嵌入式资源。当该sql文件更改时,如果没有实际的C#代码更改,点击调试后,解决方案不会重新构建带有嵌入式资源的项目。
我从很久以前就遇到过其他解决方案的这个问题,并且我自己知道需要构建解决方案以确保其被构建...但是对于许多新开发人员来说,他们无法记住需要执行此操作,当他们发现在调试时对SQL文件所做的更改没有反映出来时,会感到困惑...所以我想知道是否有任何简单的解决方法。

你在嵌入SQL资源方面有什么问题吗?也许这可能是问题所在。你能给一个更详细的解释吗? - MethodMan
拥有像嵌入式资源一样的SQL文件是强制性选项吗?我的意思是,如果它是一个单独的文件,那么有一个解决方法,可以通过在项目属性中定义,在成功构建时使用xcopy复制该文件。 - Tigran
嵌入式资源是必要的。它被打包到自定义操作程序集中,用于运行迁移脚本的安装程序。同一程序集在应用程序的调试模式中使用,以确保他们正在运行的数据库是最新的。 - Jeff
1
@Jeff 六年后,你找到解决问题的方法了吗?当然不包括重建或清理。 - Bobby Tables
相关:在这个答案中,使用解决方案资源管理器从.resx文件重建/重新创建.Designer.cs文件。 - DavidRR
2
非常烦人的是,在2020年(VS 2019)中,这个问题没有一个简单/明显的解决方法。我已经失去了对我修改嵌入式资源后为什么不在构建中显示的次数的追踪。总是要记得重新构建很糟糕。 - tig
3个回答

5

很不幸的是,对于资源文件,清理和重新构建并不总是有效。 我遇到的问题是字符串资源文件,并且我在VS2016中解决的方法如下:

  1. 如果IDE中打开.resx和.Designer.cs,则关闭它们
  2. 删除.Designer.cs类(右键单击,在“解决方案资源管理器”中删除)
  3. 双击“解决方案资源管理器”中的.resx文件以打开它
  4. 如果需要,将“访问修饰符”从“公共”更改为“无代码生成”,然后保存
  5. 将“访问修饰符”从“无代码生成”更改为“公共”,然后保存 => .Designer.cs代码应该更新

4
最简单的解决方法是进行“重建”而不是“构建”。其他人会执行“清理”操作,然后再“构建”,以确保达到100%的效果。
除非输出的DLL文件被截断,否则调试DLL文件中的嵌入式资源将不会得到更新,这只能通过重新构建和清理来保证。

2
重建被定义为清理然后构建;明确进行清理并没有额外的安全保障(也许除了确保你按下了正确的按钮/键组合)。 - Eamon Nerbonne
不幸的是,“重建”选项适用于手动使用,但不适用于由工具(如Resharper Unit Test runner)自动触发的构建。 - AFract

1

我在使用VS2017时遇到了同样的问题。

以下是我的解决方法:

  1. 打开.resx文件。确保你正在使用资源编辑器,不要使用XML编辑器,因为有时在那里做的更改不会触发Designer.cs的生成。
  2. 确保Designer.cs没有被打开。
  3. 进行一个小的更改,保存
  4. 撤销更改,保存

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接