0

背景

私は Visual Studio 2019 で作業しています。いくつかの C# クラス プロジェクトと 1 つの C# 共有プロジェクトを参照する C# Web APP Razor Pages プロジェクトがあります。

問題

Web アプリ プロジェクトをローカルまたはリモートの IIS インスタンスに発行すると、問題なく、共有プロジェクト ファイルがすべて存在し、説明され、期待どおりに動作します。

ただし、ビルド/実行してからブラウザーで表示すると、共有プロジェクトのヘルパーとページは期待どおりですが、共有プロジェクトの wwwroot ファイルはすべて動作していません。

ザ・ウォント

共有プロジェクトにあるものを確認/トラブルシューティングする必要があるたびに、ローカルに公開することはできますが、そうする必要はありません...

共有プロジェクトの wwwroot フォルダー アセットをビルド/実行で使用できるようにする方法を見つけたいと思います。また、現在作業している公開プロセスに悪影響を与えないようにする方法を見つけたいと思います。期待される。

ディーツ

関連するプロジェクトのフォルダー構造の例 (おそらく tmi ですが、あるプロジェクトから別のプロジェクトへのパスで何かをしなければならない場合、これらの相対パスは例を作成するのに十分なほど詳細です) ...


  • inetpub
    • wwwroot
      • MyNameソフトウェア
        • wwwroot <-- Web アプリと共有プロジェクトの両方からのすべての wwwroot ファイルは、最終的にPublishでここに配置されます。

  • 自分の名前
    • MyName.Common.Domain
      • MyName.Common.Domain.csproj ファイル
        • クラスを含むさまざまなフォルダーとサブフォルダー
    • MyName.Common.Presentation.Web
      • MyName.Common.Presentation.Web.shproj ファイル
      • ヘルパー <-- 正常に動作します
      • ページ <-- 正常に動作します
      • wwwroot <--- これらのファイルは公開では利用できますが、ビルド/実行では利用できません
    • aContainerFolder
      • その他の関係のないもの
      • MyName.ソフトウェア
        • MyName.Software.sln
        • ソリューションに含まれる関連プロジェクトのその他のさまざまな MyName.Software.{Purpose} フォルダー
        • MyName.Software.Web
          • その他のさまざまなフォルダーとサブフォルダー
          • wwwroot <-- これらのファイルは、ビルド/実行パブリッシュの両方で期待どおりに利用できます
          • MyName.Software.Web.csproj ファイル

ここからどこへ

私が試したことと私が持っていた質問を並べていたとき、いくつかのことがうまくいきました。プロセスを愛し、プロセス前の髪を引っ張るのが嫌い. ここで自分の質問に答えましたが、後で参照できるようにこれを投稿して、他の誰かがいくつかの髪の毛を保つのに役立つかもしれません. また、これを行う他の方法がある場合は、それらを実行してください。代替案を検討することは常に良いことです。:0)

4

1 に答える 1

0

研究と断片を組み合わせた後...

...以下は、ビルド/実行およびパブリッシュで機能しています(右クリック-プロジェクト-選択-発行を介して、またはビルド時に展開するコマンドラインmsbuildを介して)。


(1) wwwroot 宛てのファイルを別のフォルダー (_wwwroot など) に保存し、プロジェクト ファイルを調整して、直接公開されないようにします。

Web アプリ プロジェクトの .csproj:

 <ItemGroup>
    <Content Remove="_wwwroot\**\*" />
  </ItemGroup>

共有プロジェクトの .projitems (CopyToPublishDirectory または CopyToOutputDirectory タグがないことに注意してください):

  <ItemGroup>
    <Folder Include="$(MSBuildThisFileDirectory)_wwwroot\**\*" />
  </ItemGroup>

(2) ビルド イベントを Web アプリ プロジェクトに追加する

Web アプリ プロジェクトの wwwroot フォルダー内のすべてを削除するビルド前イベント (したがって、各ビルドは白紙の状態で開始されます)

  rd /s /q "$(ProjectDir)wwwroot"

各 Web アプリ プロジェクトの 2 つのビルド後イベント

 xcopy /E /Y /I "$(ProjectDir)_wwwroot" "$(ProjectDir)wwwroot"
 xcopy /E /Y /I "$(ProjectDir)..\..\..\MyName.Common.Presentation.Web\_wwwroot" "$(ProjectDir)wwwroot"

(3) _wwwroot フォルダーがチェックインされ、レコードのソースと見なされるため、ソース管理へのチェックイン時に各 Web アプリ プロジェクトの wwwroot を無視するように設定します。

(4) 通常は wwwroot フォルダーにあるすべてのものを参照します。必要なときに wwwroot に存在するため、常に存在するかのように。


于 2021-09-18T12:37:54.950 に答える