【问题标题】:Injected code in *.ASPX.VB file at pre-build event is not compiled, have to compile twice, why?在预构建事件中注入的 *.ASPX.VB 文件中的代码没有被编译,必须编译两次,为什么?
【发布时间】:2013-01-29 20:36:47
【问题描述】:

我在 Visual Studio 的一个 Web 项目中有一个预构建事件(2012 年,但 2010 年的行为相同)。

如果文件夹中有匹配的 filename.html,prebuild 会调用一个简单的 exe,它会查找每个 filename.aspx.vb 文件。

如果是这样,它只是将 filename.html 读取为字符串(转义和缩小)并将其作为字符串也注入到 Finename.aspx.vb 中,例如:

myStribBuilder.Append("这是来自外部文件的 html 代码的去向")

假设我对 filename.html 进行了修改,然后保存并编译和测试网站。它应该反映调用 filename.aspx 时的最新更改

这里会发生什么:

  • 如果我有一个非常轻的项目,只有一两页,它确实有效。它可以按预期编译。

  • 然后项目变得更大,它不再工作了。我的意思是代码被注入但没有按预期编译,如果我在网络服务器上刷新 filename.aspx 我仍然会有相同的版本但是如果我在 VS 上打开 filename.aspx.vb 代码就在那里。第二次编译 100% 正常。

我可以忍受,但在 html 文件更改后,我必须每次编译两次以进行测试。 这对我来说没有意义。

“预构建”的含义实际上是在执行预构建例程之前似乎在编译请求上缓存代码。

那么,如何确保在编译开始之前将代码注入到我的 *.vb 文件中?

【问题讨论】:

    标签: asp.net visual-studio-2010 visual-studio visual-studio-2012


    【解决方案1】:

    我发现问题不在于 VS 不等待 exe 在预构建时完成,而是在编译时打开了 filename.aspx.vb。

    代码在 IDE 上自行更新(选项设置为自动更新外部修改的打开页面),但我猜编译过程会保留打开文件的预构建版本,这在某种程度上是有意义的。

    如果我在编译之前关闭文件就可以了。

    现在我想知道是否有解决方法,但我知道在编译之前在 IDE 中动态修改打开的文件并不常见。然而,我确实非常依赖这种技术。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多