web-dev-qa-db-ja.com

asp.net webapi publish-xmlファイルはコピーされません

自動生成されたヘルプを持つMVC 4.0 WebApiプロジェクトがあります これに基づいて

モデルクラスは、ソリューションの別のプロジェクトに保存されます。 xmlファイルの生成は、すべてのプロジェクトで有効になっています(プロジェクトプロパティ->ビルド-> OutPut-> XMLドキュメントファイル-有効)。

ローカルデバッグではすべて問題ありません。xmlファイルはプロジェクトディレクトリにコピーされ、別のプロジェクトのフィールド/クラスのコメントが表示されます。

しかし、(フォルダーへの)公開プロファイルを使用すると、xmlファイルは出力フォルダーにコピーされません。メインWebApiプロジェクトから1つのxmlファイルのみがコピーされます。したがって、他のプロジェクトのクラスへのコメントは表示されません。

70

私にとっても同様の問題がありました。私にとっては、答えは少し「ドー」です。瞬間。

プロジェクトの設定では、リリースではなくデバッグ構成でのみXMLドキュメントファイルを有効にしました。 Releaseでデプロイしていたため、XMLドキュメントは実際には生成されませんでした。そのため、修正プログラムは、デバッグ構成とリリース構成の両方でXMLドキュメントを有効にすることを確認していました。

169
grimus

次の2つの方法で実行できます。

1)プロジェクトプロパティに移動->ビルドオプションを選択-> "XMLドキュメントファイル"をチェック->パスを追加 "App_data\XMLDocument.xml"->設定を保存、プロジェクトをビルド-> XMLDocumentを含めます。 xmlファイル->プロパティを選択->出力ディレクトリにコピー->「常にコピー」を選択

2)プロジェクトプロパティに移動-> [Webのパッケージ化/公開]オプションを選択->表示するアイテム->ドロップダウンから[このプロジェクトのすべてのファイル]を選択

42

パブリッシュプロファイルの.pubxmlファイルでカスタムMSBuildターゲットを使用するだけで、これを解決できました。以下の手順に従ってください。最終結果として、このMSBuildターゲットは、すべての.xmlファイルをWeb APIのbinフォルダーから公開先のbinフォルダーにコピーします。これらのファイルをApp_Dataにコピーする必要はありません。

1)[Project Folder]\Properties\PublishProfilesから適切な.pubxmlファイルを開きます。

2)<Project><PropertyGroup>タグ内にこのスニペットを追加します。

<CopyAllFilesToSingleFolderForPackageDependsOn>
  CustomCollectFiles;
  $(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>

3)<PropertyGroup>タグの後にこのスニペットを追加します。

  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="bin\*.xml" />

      <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

クレジットは この回答 にあります。これは、公開時にプロジェクトディレクトリの外部からファイルを含める方法に対処していました。

23
Keith

Webapiプロジェクトのxmlファイルのみがデプロイされているという同じ問題がありました。

修正するには、これを最初のPropertyGroup要素内のWeb(Api)プロジェクトファイルに追加する必要がありました。

<ExcludeXmlAssemblyFiles>false</ExcludeXmlAssemblyFiles>

その後、ドキュメントすべてのプロジェクトのxml-files(有効になっている場合)はpublished

12
martinoss

1つの方法は、プロジェクト内の "App_Data" folderにXMLファイルを追加し、Visual Studio内で、そのプロパティにファイルを選択することです "Copy to Ouput Directory" 「常に」。enter image description here

7
Toan Nguyen

前の回答を補完するものとして、以下の記事のように、含める別のタイプのタグもあります。

https://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-extra-files

鬼ごっこ:

<CopyAllFilesToSingleFolderForMsdeployDependsOn>
  CustomCollectFiles;
  $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
6
Ivan

Publishprofile(* .pubxml)を開き、このコードを「プロジェクト」要素に含めます。

<ItemGroup>
    <Content Include="bin\yourDocumentationFile.xml">
        <CopyToOutputDirectory>true</CopyToOutputDirectory>
    </Content>
    <!-- Include a content to each documentation file -->
</ItemGroup>
5

ドキュメントファイルが必要ない場合は、HelpPageConfig.csに移動してコメントアウトします。

config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")))

0
Ryan Dooley

サイトが公開プロファイルを使用している場合(たとえば、ISPからプロファイルをダウンロードした場合)、次のオプションがFalseに設定されていることを確認する必要があります。

<ExcludeApp_Data>False</ExcludeApp_Data>

XMLファイルのプロパティは、ビルドアクション-コンテンツ、出力ディレクトリにコピー-常に設定できます。

ただし、上記のパラメーターが公開プロファイルでTrueに設定されている場合、XMLファイルは公開されません。これを難しい方法で学びました。

0
Scott