简体   繁体   中英

The file 'blahblah.aspx' has not been pre-compiled, and cannot be requested

Yes I know, this question has been asked loads of times already.

But this isn't quite the same. Actually I think the error message is accurate!

Normally when you view a published ASPX file, you just see "This is a marker file generated by the precompilation tool, and should not be deleted!".

In my case, after building and publishing, when I view the published pages I see the full source code.

I'm using a newly installed copy of VS2012 so there's obviously something not quite right.

Any suggestions?

Thanks :)

I have been struggling to fix this issue for past few days. At least in my case, the error message was completely misleading and had nothing to do with precompiled website. There are many articles or posts out there that give many different answers which only add to confusion. I personally believe this error is caused mainly due to missing references or incorrect versioning. In order to fix the issue as fast as possible you have to rule this out, or otherwise fix the missing/wrong reference.

To do so you need to use a tool named "Assembly Binding Log Viewer". This tool will tell you which references are missing or have wrong versions. If there is a missing/mismatched reference then go ahead and fix it; otherwise you need to do the other magic tricks like checking for App Pool being 32-bit or permissions.

Steps:

  1. At your server create the following folders

    C:\\fuslog C:\\fuslog\\logs

  2. Copy Assembly Binding Log Viewer to your server at C:\\fuslog:

    You can find the program at a location like this

    C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bin\\fuslogvw.exe

    You might need to look at "Program Files" instead of "Program Files (x86)" or look into different vesions instead of "v7.0A" (some newer versions might not work on older Windows versions)

  3. Execute fuslogvw.exe at server (you might need to right click and run as administrator)

  4. Click on "Setting..."

  5. Ensure "Log bind failures to disk" is checked

  6. Check the Enable custom log path and enter the following in the box: C:\\fuslog\\logs

  7. Click on OK

  8. Recycle/reset your app pool to enforce a fresh binding

  9. Click on Refresh. Now you can see the failed binding in here

  10. The better way to find the exact binding is to go to c:\\fuslog\\logs\\Default. In here you can find the exact binding failures. Some are irrelevant and you need to find the critical one by trial and error. Mine was the following failure:

      System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35 

I fixed the issue by adding the following entry at my web sites web.config:

<configuration>
    ...
    <runtime>
        ...
        <!-- Added this entry to fix the issue -->
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.0" />
        </dependentAssembly>
        ...
    </runtime>
    ...
</configuration>

I hope this helps others to quickly fix the issue.

Normally when you view a published ASPX file, you just see "This is a marker file generated by the precompilation tool, and should not be deleted!".

Well, not really "normally" - you have to set that explicitly .

Usual way - open Visual Studio, right-click project, "Publish", select profile

Check the profile settings, or if necessary, create a new profile and (re)set to what you want.

Screen shot of settings where you can pre-compile, make "updatable" or not (fully compiled, where you see the note you referred to above), etc.

As shown below, the "normal" (default) settings is "updatable". Uncheck == everything is compiled - even (cs/vb)html, aspx, etc. (no source viewable in files)

发布配置文件设置

Hth...

Finally, I found the problem. If you use MVC framework like me, please update your MVC version.In my case I changed MVC 4.0.0.0 to 4.0.0.1 and checked all project references's "Local Copy" properties to "True". After that my problem solved. Please check out MVC version in all config file(4.0.0.0->4.0.0.1)

And watch out asp compiler warning messages.

The issue I ran into with our application was a dirty deploy directory. A team had migrated views from ASPX or ASCX to Razor but the application still wanted to load the ASCX file even though it was gone out of source control. The deploy directory still had the Web Forms files so clearing out the directory on each deploy fixed the issue. The next step you could take is to clear the view engines in Global.asax.cs and register the Razor view engine ahead of the WebForms one like so:

protected void Application_Start(object sender, EventArgs e) {
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new RazorViewEngine());
    ViewEngines.Engines.Add(new WebFormViewEngine());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM