gpt4 book ai didi

asp.net - 大型预编译 Asp.net 网站项目中出现错误 CS0433

转载 作者:行者123 更新时间:2023-12-02 15:41:22 25 4
gpt4 key购买 nike

背景

我接手了一个非常大的asp.net网站项目。旧的部署过程是将 .cs、.aspx 和 .ascx 文件复制到 IIS 并即时构建。我想预编译它并使用 TeamCity 自动部署它。我已经在其他一些网站项目中完成了此操作。

该项目有大约 350 个用户控件,这些控件很好地组织在文件夹中,但到处都在使用。从其他文件夹引用的控件,从彼此引用的控件......基本上是一个循环文件​​引用噩梦。

我的尝试

我的第一次尝试是像其他人一样构建它。 MSbuild整个vs2012解决方案。我遇到了大量的“不允许循环文件引用”。来发现所有这些组织良好的控件到处都在使用,并且到处都有循环引用。 I read this我将“web.config”切换为compilation batch="false",然后在构建中将站点设置为“不可更新”和“使用固定命名程序集”。该网站已构建完成,但在我的四核、SSD、16GB RAM 开发盒上编译实际上需要 25 分钟。这是 Not Acceptable 构建时间。

我知道,如果我关闭“使用固定命名程序集”,网站的构建速度会显着加快。 (我已经在一个较小的网站上证明了这一点。时间从 4 分钟缩短到了 45 秒)。当我删除该设置时,我遇到了奇怪的构建错误:

c:\Projects\Web\Site.master(146): error CS0433: The type 'ASP.usercontrols_modules_viewprofilepopup_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_viewprofilepopup.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_xa514so5.dll'

c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_site.master.cdcab7d2.0.cs(927): error CS0433: The type 'ASP.usercontrols_modules_viewprofilepopup_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_viewprofilepopup.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_xa514so5.dll'

error ASPPARSE: c:\Projects\web\Web\UserControls\Modules\JobsLeftMenu.ascx(128): error CS0433: The type 'ASP.usercontrols_modules_imagesgallerymodule_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_imagesgallerymodule.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_nvrj33tx.dll'

error ASPPARSE: c:\Projects\web\Web\Site.master(146): error CS0433: The type 'ASP.usercontrols_modules_viewprofilepopup_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_viewprofilepopup.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_xa514so5.dll'

这是确切的 aspnet_compiler.exe 命令:

aspnet_compiler.exe -v /web -p Web\ -f "Precompiled Web"

我用谷歌搜索寻找答案。不,它们不会在任何地方的代码中重复。它们只是恰好位于不同的文件夹中,由不同文件夹中的其他控件使用。我有一种感觉,这是由于循环文件引用造成的。好的。我删除了其中一些的使用,以查看它是否可以构建,并且构建过程只是转移到其他错误,就像这个一样。我不能只是删除所有代码来适应这个...如何在不打开“使用固定命名程序集”的情况下修复这些错误?

我尝试过的事情

  1. 清除了整个系统中的临时 ASP.NET 文件
  2. 尝试在 Visual Studio 2012 中直接“发布”。同样的错误。
  3. 尝试将网站转换为 Web 应用程序,但出现了太多错误(超过 600 个)。
  4. 再次:确保没有重复的文件和代码来解释它。我使用 notepad++ 文本搜索了整个解决方案文件夹,以验证是否存在其他同名的控件。
  5. Checked this.
  6. 我打开了 msbuild 性能调整:/m/p:CreateHardLinksForCopyLocalIfPossible=true/p:BuildInParallel=true

我很困惑,似乎认为我唯一的选择是重写应用程序,在转换为 Web 应用程序时艰难地解决错误,或者继续将源代码部署到网络服务器,但自动执行。

最佳答案

我知道您已经尝试过,但避免循环引用将是您最好的选择。请注意,术语“循环引用”实际上并不完全正确。构建系统提示的是目录级别的循环引用,而不是文件级别。

例如sub1\page.aspx 使用 sub2\uc1.ascx 使用 sub1\uc2.ascx

在文件级别,没有圆圈,但在目录级别有,这扰乱了批处理的工作方式。

虽然看起来您遇到的情况太多以至于无法修复,但我敢打赌,如果您查看“目录圈”的详细信息,您会发现情况并不多。绘制引用图可能有助于理解事物。

然后您只需将违规者移至不同的文件夹并相应地更改链接即可。

是的,这是一个痛苦的过程,但它可能是可以解决的。

关于asp.net - 大型预编译 Asp.net 网站项目中出现错误 CS0433,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14784369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com