16

私が作成しましたweb.config完全なファイル、XMLエラーは表示されません)

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <configSections>
      ...
      <location path="." inheritInChildApplications="false">
        <connectionStrings>
          <add name="ElmahLog" connectionString="data source=~/App_Data/Error.db" />
          <add name="database" connectionString="w" providerName="System.Data.EntityClient"/>
        </connectionStrings>
      </location>
  ...

変換ファイルを使用する(web.Staging.config

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="database"
      connectionString="c"
      providerName="System.Data.EntityClient"
      xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
  </connectionStrings>
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <customErrors defaultRedirect="error.aspx"
      mode="RemoteOnly" xdt:Transform="Replace">
    </customErrors>
  </system.web>
</configuration>

モードで公開していStagingます(Webサイトを右クリック>公開>方法:ファイルシステム...)

------ Build started: Project: Drawing, Configuration: Staging Any CPU ------
  Drawing -> D:\Project\bin\Staging\Drawing.dll
------ Build started: Project: MySystem, Configuration: Staging Any CPU ------
  MySystem -> D:\Project\bin\Staging\MySystem.dll
...

しかしweb.config、出力フォルダーを見ると、変更されていません。

ビルドログで次のことがわかりました。

D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
D:\Project\Web.Staging.config(3,2): Warning : No element in the source document matches '/configuration'
Transformed web.config using Web.Staging.config into obj\Staging\TransformWebConfig\transformed\web.config.

何が問題なのですか?私はこれを正しくやっていますか?

4

7 に答える 7

22

遅く答えますが、おそらく私は誰かの頭痛を救うことができます。Visual Studio 2013では、ビルドとデプロイの構成を選択する場所が2つあります。構成マネージャーを使用し、[Webの公開]を使用して、ウィザードの[設定]というタイトルの3番目の手順で、使用する構成を選択できます。新しい構成を選択しない場合は、選択した構成の変換が使用されます。

于 2014-10-08T19:57:24.920 に答える
17

私は2つのことを知りました:

  • タグに名前空間を設定することはできません<configuration>(例:for <location path="." inheritInChildApplications="false">
  • 変換ファイルの正しい階層を監視する必要があります。

好き

<configuration>
  <location>
    <connectionStrings>

それ以外の

<configuration>
  <connectionStrings>
于 2011-04-01T13:22:46.633 に答える
6

Web.ConfigファイルのプロパティでBuild Actionがに設定されていることを確認しますContent

ビルドアクションがに設定されNoneている場合、出力ディレクトリにコピーされている場合でも、変換されません。

于 2016-02-17T20:10:43.040 に答える
3

InsertIfMissing追加しようとしているセクションがまだ出力に表示されていない場合は、必ず含めてください。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>

      <security xdt:Transform="InsertIfMissing">
        <requestFiltering allowDoubleEscaping="true" />
      </security>

    </system.webServer>
  </location>
</configuration>
于 2020-02-28T19:10:48.577 に答える
0

元の「web.config」から「configuration」の他のすべての属性をコピーすることを忘れないでください。VS2012は自動的にそれを行わないようであり、もちろん一致するものはありません...

于 2013-05-23T09:02:41.350 に答える
0

応答も遅くなりますが、これは誰かを助けるかもしれません。

同じソリューションに2つのWebサイトがある場合、それらの1つを公開しようとすると、両方のプロジェクトの構成が1つしかない場合、変換が機能しない可能性があることに気付きました。

私のウェブサイトの1つは常に変化していましたが、もう1つは変化することもあれば、変化しないこともありました。

たとえば、ソリューションに「Auto」構成があり、両方のWebサイトにweb.Auto.configがあります。

「AutoAdmin」という別の名前で新しい構成を作成し、2番目のプロジェクトのweb.AutoAdmin.configファイルも作成することで解決しました。再度公開すると、最終的に変換が行われました。

于 2015-03-12T17:06:54.493 に答える
0

この問題を修正するには、以下の手順に従いました。正しい方向を指してくれてありがとう、@michaelhawkins。2か所でリリースするように構成を変更する必要があります。

ここに画像の説明を入力してください

プロジェクトを右クリックして、[プロパティ]を選択します。動作しない場合は、CPUアーキテクチャでx86を選択してみてください

ここに画像の説明を入力してください

于 2019-07-24T08:48:17.667 に答える