如何在不包含 aspx.cs 文件的情况下发布 Webforms 网站

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

我正在开发一个遗留的 c# asp.net winforms 项目。发布后,wwwroot 文件夹包含每个页面的 aspx 和 aspx.cs 文件。我需要使用 Bin 文件夹中每个页面的 dll 来预编译该站点。 Visual Studio 中的设置是什么来发布带有预编译 dll 且没有 aspx.cs 文件的网站? 在属性页/MSBUild 选项中,我取消选中了“允许此预编译站点可更新”选项,但这没有执行任何操作。

asp.net winforms precompile
1个回答
0
投票

项目的“类型”将决定这种发布能力,删除所有源代码,只保留 aspx 页面+编译的 .dll。

因此,(不幸的是)没有某种“设置”,而是所选项目类型的设置决定了您是否有这样的发布选项。

如果您有“asp.net 网站”而不是“asp.net 网站应用程序”,则网站在发布过程中没有这样的选项。

因此,如果有一个“网站”,那么您不应该使用或使用 .sln 项目文件打开此类项目,但您应该使用

文件->打开网站。

因此,只有网站的“应用程序”选项为您提供了删除源代码文件和预编译的选项。事实上,这种能力比“网站”有几个优势,当然,在发布之前预编译网站就是这样的优势之一。我相信网站发布还可以选择“强制”或“预编译”,但该选项仍然会导致源代码文件(aspx.cs 或 aspx.vb)页面被发布。

当然,这个“网站”选项的一大优点是,您可以更改一个 .aspx 页面,或更改后面的代码,然后只需将 2 个页面发布(或复制)到目标网站,然后服务器,你就完成了。这当然意味着 IIS 现在正在编译您的代码和站点,但更令人担忧的是,这意味着 Visual Studio 不再为您执行 .dll 和程序集解析。并且网站也不允许在构建过程中包含多个项目。也许最糟糕的是,您的 NugEet 包和开发期间引用的 .dll 必须驻留在 bin 文件夹中。因此,您无法删除 bin 文件夹并重新编译。在我看来,在编写软件时,生成最终且正确的 .dll 输出的构建过程的概念是 100% 的要求。

那么,有解决办法吗?

嗯,您可以将网站重构为“应用程序”。该过程的一部分实际上是“自动化的”。

我在 vs2019 或 vs2022 中找不到“转换”为应用程序,但它应该存在。

从网站转换为网站应用程序的步骤?这有点复杂,因为“应用程序”现在有一个“设计器”文件,而“网站”没有也不使用设计器文件。 (因此,设计器文件在这里再次强制执行更加严格的编译时间分辨率)。

此处概述了转换此类项目的步骤:

https://devblogs.microsoft.com/dotnet/converting-a-web-site-project-to-a-web-application-project/

如果您尝试上述操作,当然可以处理该项目的副本。

© www.soinside.com 2019 - 2024. All rights reserved.