allowDefinition = ‘MachineToApplication’ Fehler beim Veröffentlichen von VS2010 (aber nur nach einem vorherigen Build)

Ich kann meine Asp.Net MVC 2-Anwendung ohne ein Problem auf meinem lokalen Computer ausführen. Einfach ausführen / debuggen.

Aber wenn ich es schon gebaut habe, kann ich es nicht veröffentlichen! Ich muss die Lösung säubern und wieder veröffentlichen. Ich weiß, das ist nicht systemkritisch, aber es ist wirklich nervig. “One Click Publish” ist nicht “Saubere Lösung und dann ein Klick veröffentlichen”

Der genaue Fehler ist wie folgt:

Fehler 11 Es ist ein Fehler, einen Abschnitt zu verwenden, der als allowDefinition = ‘MachineToApplication’ über die Anwendungsebene hinaus registriert ist. Dieser Fehler kann durch ein virtuelles Verzeichnis verursacht werden, das nicht als Anwendung in IIS konfiguriert ist.

Ich vermute, dass es etwas mit der Web.Config im Views-Ordner zu tun hat, aber warum dann erst nachdem ich das einmal erstellt habe. Und nur um zu bemerken, die App funktioniert gut einmal veröffentlicht.

   

    Ich hatte das gleiche Problem mit meinen MVC-Apps. Es war frustrierend, weil ich immer noch wollte, dass meine Ansichten überprüft wurden, also wollte ich MvcBuildViews nicht ausschalten

    Glücklicherweise bin ich auf einen Posten gestoßen, der mir die Antwort gegeben hat. Halte die MvcBuildViews als wahr , dann kannst du die folgende Zeile darunter in deiner Projektdatei hinzufügen:

    [SomeKnownLocationIHaveAccessTo] 

    Und machen Sie diesen Ordner nicht im Ordner Ihres Projekts. functioniert bei mir. Es ist keine perfekte Lösung, aber es ist gut für den Moment. Stellen Sie sicher, dass Sie den Paketordner (im Ordner obj \ Debug und / oder obj \ Release ) aus Ihrem Projektordner entfernen, sonst wird der Fehler weiterhin angezeigt .

    FWIW, MS kennen diesen Fehler …

    Ich habe alles aus meinem obj / Debug-Ordner gelöscht und diesen Fehler behoben. Dies erlaubte mir, in der

     true 

    Option in meiner Projektdatei (die mit der Vorlage T4MVC T4 nützlich ist).

    Bearbeiten: Dies kann viel einfacher erreicht werden, indem Sie einfach das “Build” -> “Rebuild Solution” -Menü verwenden (da die Wiederherstellung tatsächlich den obj / Debug-Ordner löscht und dann die Lösung erstellt).

    Ich verwende diese Problemumgehung auf der MS Connect- Seite für diesen Fehler. Es reinigt alle obj- und temp-Dateien in Ihrem Projekt (alle Konfigurationen), bevor Sie AspNetCompiler ausführen.

    Ändern Sie das MvcBuildViews-Ziel in Ihrer Projektdatei so, dass es von den Zielen abhängt, die die von Visual Studio erstellten Paketierungsdateien bereinigen. Diese Ziele sind automatisch in Webanwendungsprojekten enthalten.

    Alle Paketierungsdateien werden jedes Mal gelöscht, wenn das MvcBuildViews-Ziel ausgeführt wird.

        

    Dieses Problem tritt auf, wenn eine Webprojektausgabe (web.config mit Vorlagen oder temporäre Veröffentlichungsdateien) im Ordner “obj” vorliegt. Der verwendete ASP.NET-Compiler ist nicht intelligent genug, um Objekte im obj-Ordner zu ignorieren, sodass stattdessen Fehler ausgegeben werden.

    Eine andere Lösung besteht darin, die Publish-Ausgabe direkt vor dem Aufruf von zu bearbeiten. Öffne deine .csproj und ändere dies:

        

    zu diesem:

              

    Das löscht alle Web.configs unter \ obj, sowie alle PackageTmp Ordner unter \ obj.

    Wenn Sie Web Publish verwenden, können Sie MvcBuildViews=false und PrecompileBeforePublish=true MvcBuildViews=false , die nach dem Kopieren in den temporären Ordner (unmittelbar vor Veröffentlichung / Paket) vorkompiliert werden.

    Hinweis: PrecompileBeforePublish wird nur vom “neuen” Web Publishing-Pipeline-Stack (VS2010 SP1 + Azure SDK oder VS2012 RTM) unterstützt. Wenn Sie VS2010 RTM verwenden, müssen Sie eine der alternativen Methoden verwenden.

    In Bezug auf die Lösung von Jrummell, die Einstellung:

    DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

    Es funktioniert in VS 2010 , aber nicht in VS 2012 . Im Jahr 2012 musst du sagen:

    DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"

    Quelle:

    VS 2010: C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets

    VS 2012: C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.targets

    Ich weiß, dass dies beantwortet wurde, aber ich wollte nur etwas Interessantes hinzufügen, das ich gefunden habe.

    Ich hatte die “MvcBuildViews” im Projekt auf “false” gesetzt, alle bin- und obj-Ordner gelöscht und den Fehler immer noch erhalten. Ich fand, dass es eine “.csproj.user” -Datei gab, die “MvcBuildViews” noch auf True festgelegt hatte.

    Ich habe die Datei “.csproj.user” gelöscht und dann hat alles funktioniert.

    Stellen Sie also sicher, dass Sie Ihre csproj-Datei ändern, indem Sie die Datei “.csproj.user” ebenfalls ändern oder löschen.

    Ich hatte auch dieses Problem, also habe ich ein Pre-Build-Event in den Projekteigenschaften erstellt, um die Ausgabe-Verzeichnisse zu ${projectPath}\bin,${projectPath}\obj\${ConfigurationName} ( ${projectPath}\bin,${projectPath}\obj\${ConfigurationName} ). Bei einem anderen Projekt bekam ich diesen Fehler auch, obwohl das Reinigungsereignis vorhanden war. Im zweiten Projekt kompilierte ich die Ansichten wie in der Projektdatei aufgelistet:

     true 

    Ich änderte das Wahr zu Falsch, und es beschwerte sich nicht mehr über diesen Fehler, aber lief noch richtig. Ich werde nicht behaupten, ich wüsste genau, was den zweiten Fehler verursacht hat, aber zumindest brachte es mich voran.

    Das Problem hat mit den Zwischendateien zu tun, aber es gibt eine andere Lösung, die darin besteht, diese Zwischendateien vor dem Erstellen der Ansichten zu bereinigen.

    Diese Lösung wurde in einigen Versionen von VS enthalten, aber ich kann nur sagen, dass ich das Problem in VS 2013 Update 5 hatte. (Siehe “Beware” unten, könnte es in dieser Version behoben werden, aber nicht nur in meinem bestimmten Nicht-Standard-Fall).

    Ich habe die Lösung von Error ausgeliehen: allowDefinition = ‘MachineToApplication’ über Anwendungsebene in Visual Studio Connect hinaus.

    Die Lösung besteht darin, diese Zeilen in das Webanwendungsprojekt ( .csproj Datei) .csproj , die das Löschen der fehlenden Zwischendateien übernehmen:

       <_enablecleanonbuildformvcviews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true    <_publishtempfoldernamestocleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge">        

    Vorsicht: Aus irgendeinem Grund, wahrscheinlich weil ich es selbst in das Projekt aufgenommen habe, wurde mein Build-Ziel zum "BuildViews" der Ansichten "BuildViews" , anstatt "MvcBuildViews" , also musste ich das BeforeTargets Attribut entsprechend ändern. Ich habe auch das Ziel vereinfacht, indem ich die PropertyGroup und die Bedingung wie PropertyGroup vereinfachte:

        <_publishtempfoldernamestocleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge">        

    In meinem Fall sah ich, dass, wenn ich MvcBuildViews und PrecompileDuringPublish als beide wahr habe – war, was dieses Problem verursachte.

    So entfernte ich das PrecompileDuringPublish und diese Lösung funktionierte für mich und ich habe seitdem dieses Problem nicht konfrontiert.

    Bildbeschreibung hier eingeben