有一个大型ASP。NET web项目,由多年来开发的数万个文件组成。
有效的层次结构如下:
SiteAll.sln
Siteroot.csproj
Siteweb.config
...
SiteSub1sub1.csproj
SiteSub1web.config <-- inherits from Siteweb.config at runtime;
tell IntelliSense to do the same
SiteSub1page.aspx
...
SiteSub1Sub1asub1a.csproj
...
SiteSub2sub2.csproj
...
Sitebin <-- all assemblies compiled to here
后端代码编译良好,项目运行page.aspx
时没有错误,就像执行IIS时理解嵌套的web.config一样(即Siteweb.config
是根配置,SiteSub1web.config
继承自根配置(。
但是,在Visual Studio 2022中编辑page.aspx
(作为Sub1
项目的一部分(时,IntelliSense报告错误(即"未引用程序集"(,因为它不知道SiteSub1web.config
是将从父web.config继承的子web配置。
还有其他问题,例如看不到/不理解<system.codedom>
(根web.config更改以启用Roslyn(和/或Sitebin
是加载程序集的位置(当将非SN共享程序集添加到<assemblies>
时,会破坏aspx编辑器高亮显示(。
没有将所有项目移动到顶级文件夹:
- 是否可以让Visual Studio应用web.config,就好像它实际上在运行一样
- 同样,是否可以让Visual Studio理解"Sub1/Page.aspx"(而不是"Page.aspx"(是部署网站时的相对路径
不将所有项目文件移动到根文件夹的一个重要原因是,除了一些乏味的半自动化工作外,VS在这种情况下很难处理"显示所有文件"。在SDK风格的项目中否定路径也是痛苦的(缓慢和管理问题(。
右键单击项目,然后在项目属性中选择预生成事件/后生成事件命令行对话框。
您可以使用这些宏中的任何一个来指定文件的位置,或者在进行多项选择时获取输入文件的实际名称。这些宏不区分大小写。
https://learn.microsoft.com/en-us/visualstudio/ide/reference/pre-build-event-post-build-event-command-line-dialog-box?view=vs-2022#宏