asp.net-mvc-3 - framework - mvc asp net 4




Trasformazione Web.config: attributo "xmlns: xdt" non riconosciuto. Nota che i nomi degli attributi fanno distinzione tra maiuscole e minuscole (8)

  1. Fare clic con il tasto destro del mouse sul progetto, quindi fare clic su Pubblica
  2. Vai a Impostazioni -> File pubblica opzioni
  3. Deseleziona Precompila durante la pubblicazione

Ciò impedirà a web.debug.config / web.release.config di reiniettare il file su web.config se stai usando visual studio publishing.

Sto ottenendo questo strano bug intermitent in un progetto MVC 3.0 Quando costruisco il progetto a volte viene visualizzato il seguente messaggio di errore:

Attributo "xmlns: xdt" non riconosciuto. Nota che i nomi degli attributi fanno distinzione tra maiuscole e minuscole.

Questo si riferisce al file standard di web.config (Web.Release.config copiato di seguito). Non ci sono altri errori o avvertenze. Questo sta accadendo in modalità di debug e rilascio. A volte si cancella se pulisco la soluzione

INIZIA AGGIORNAMENTO

Trovato il problema. Nel file di progetto MVC (MyProject.csproj) avevo impostato le viste di compilazione su true

<MvcBuildViews>true</MvcBuildViews>

Una volta rimandato a falso, l'errore di cui sopra va via. Mi piacerebbe avere la vista costruire in quanto si ferma un sacco di errori stupidi del codice di visualizzazione, ecc. Ed è un miglioramento delle prestazioni (le pagine sono precompilate invece di jit)

Qualcuno sa che cosa sta causando l'errore? è un insetto?

AGGIORNA AGGIORNAMENTO

<?xml version="1.0"?>

<!-- For more information on using Web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an atrribute "name" that has a value of "MyDB".

    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your Web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

C'è un'altra soluzione alternativa da Microsoft Team. Vedi i dettagli here .

Copia e incolla questo snippet nel tuo file .csproj o .vbproj:

<PropertyGroup>
  <_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews>
</PropertyGroup>
<Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews">
  <ItemGroup>
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\Package\**\*" />
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TransformWebConfig\**\*" />
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\CSAutoParameterize\**\*" />
    <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TempPE\**\*" />
  </ItemGroup>
  <Delete Files="@(_TempWebConfigToDelete)" />
</Target>

Questo automatizzerà il processo di pulizia della cartella 'obj' usando Build Targets.


Ho appena cambiato sotto su web.config

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

a

<configuration>

Ha risolto il problema


Ho trovato questo funziona meglio per me:

del "$(ProjectDir)obj\*" /F /Q
del "$(ProjectDir)obj\$(ConfigurationName)\AspnetCompileMerge\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\CSAutoParameterize\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\Package\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\ProfileTransformWebConfig\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\TempPE\*" /F /S /Q
del "$(ProjectDir)obj\$(ConfigurationName)\TransformWebConfig\*" /F /S /Q

altrimenti build (s) lamentarsi di edmxResourcesToEmbed scomparendo.


Mi sono imbattuto nello stesso problema. Ci sono un sacco di battute là fuori relative a MvcBuildViews e varie condizioni di errore. Ma nessuno sembra menzionare questo particolare errore. Una soluzione rapida che ha funzionato per me era quella di eliminare il contenuto della directory "obj" per il progetto Web interessato, quindi ricostruire.


Questa è una specie di soluzione alternativa, ma puoi aggiungere la seguente riga ai tuoi comandi di pre-costruzione :

del $(ProjectDir)obj\* /F /S /Q

Fai clic con il tasto destro del mouse sul tuo progetto> Proprietà> Crea eventi> Pre-build


basta rimuovere l'attributo xmlns: xdt da web.config, ma tenerlo in web.release.config e web.debug.config.

La tua trasformazione continuerà a funzionare - così come il tuo sito web.


Funziona con Continuous Integration e WebDeploy:

Questo problema si verifica nel momento in cui ho impostato

<MvcBuildViews>true</MvcBuildViews>

nel mio file di progetto, che devo fare.

Dopo aver letto e testato tutto ciò che ho trovato su questo problema ho un wokraround, che funziona anche con WebDeploy tramite MSBuild

MSBUild.exe ... /p:DeployOnBuild=true

È (solo) necessario eliminare la sottocartella TransformWebConfig nella propria cartella di compilazione durante gli eventi pre e post-compilazione. Funziona anche con server di integrazione continui che si interrompono se non esiste alcuna cartella

Riga di comando dell'evento pre-build:

if exist "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\" del "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\*" /F /S /Q

Riga di comando dell'evento post-build:

if exist "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\" del "$(ProjectDir)obj\$(ConfigurationName)\transformwebconfig\*" /F /S /Q

Funziona bene anche con Resharper che a volte si confonde se si elimina l'intera cartella obj .

Assicurati di impostare l' Run the post-build event always !

AGGIORNAMENTO: ha sostituito il debug e il rilascio con $ (ConfigurationName) e rimosso la riga duplicata risultante





web-config