web-dev-qa-db-ja.com

Visual Studioでリンクとしてファイルを追加-デバッグと公開

リンクとしてASP.NETプロジェクトにファイルをリンクする必要があるたびに、Visual Studioが非常にバグが多く、これらに煩わしいので、忘れることが常にあります。バグ/制限があるため、ファイルはデバッグ出力フォルダーにコピーされません。また、ファイルのプロパティを変更して、パブリッシュ出力フォルダーにもコピーされるようにする必要があります。

私はこれを多くの調査の後に苦労して学び、このプロセスを簡単にするためにAfterBuildターゲットを作成しました。ただし、ファイルを追加する際には手動で行う作業がまだいくつかあります。

これは私が管理しているプロジェクトの例です。 ASP.NETプロジェクトの「utilities」フォルダーにファイルYIUCARDを追加するとします。

1)Visual Studioで「ユーティリティ」フォルダーを右クリックし、「追加->既存のアイテム」を選択します。

Step 1

2)追加するファイルを選択し、一度クリックします(ダブルクリックしないでください)。

Step 2

3)[追加]ボタンの横にある矢印をクリックして、[リンクとして追加]を選択します。

Step 3

現時点では、これは何もしません。ファイルはどのフォルダーにもコピーされません(デバッグおよび公開)。プロジェクトに追加されたばかりです。

4)ファイルを右クリックして、[プロパティ]を開きます。

Step 4

5)変更:「ビルドアクション」を「コンテンツ」に、「出力ディレクトリにコピー」を「常にコピー」に

Step 5

この時点で、ファイルはパブリッシュ出力フォルダー(パブリッシュ時に定義した任意の場所)にコピーされます。ただし、ローカルでデバッグする場合(F5)、ファイルはコードベースのローカルの「ユーティリティ」フォルダーにコピーされないため機能しません。

6)「すべて保存」を選択して、Visual Studioで変更を保存します。これにより、「。csproj」ファイルが保存されます。変更を加えたため、手動で編集します。

Step 6

7)Notepad ++で「.csproj」を開きます。

Step 7

8)「BeforeBuild」イベントにファイルを追加します(これは私のものです)。

Step 8

 <Target Name="BeforeBuild">
    <ItemGroup>
      <UtilitiesFiles Include="..\path\to\file\REDOPXX.NEW" />
      <UtilitiesFiles Include="..\path\to\file\REDFMTST" />
      <UtilitiesFiles Include="..\path\to\file\JOBCARD" />
      <UtilitiesFiles Include="..\path\to\file\YIUCARD" />
    </ItemGroup>
    <Copy SourceFiles="@(UtilitiesFiles)" DestinationFolder=".\utilities" SkipUnchangedFiles="true" />
  </Target>

9)ファイルを必要な出力フォルダーに直接移動できるように、プロジェクトを自動的に公開するリリースモードの「AfterBuild」イベントがあります。

  <Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release' ">
    <PropertyGroup>
      <OutputDir>..\path\to\publish\MyProject</OutputDir>
    </PropertyGroup>
    <Message Importance="High" Text="Output DIR: $(OutputDir)" />
    <RemoveDir Directories="$(OutputDir)" ContinueOnError="true" />
    <MSBuild Projects="MyProject.csproj" Properties="Configuration=$(Configuration);WebProjectOutputDir=$(OutputDir);OutDir=$(OutputDir)bin\" Targets="ResolveReferences;_CopyWebApplication" />
  </Target>

10)ファイルをNotepad ++に保存し、Visual Studioに再ロードします。

Step 10

プロジェクトをビルドすると、ファイルはDebugフォルダーとRelease/Publishフォルダーの両方にコピーされます!

ただし、これを行うための簡単で直感的な方法があるかどうかを知りたいと思います。

これは、デバッグ出力フォルダーをRelease/Publishフォルダーと同じに変更することで修正され、最初に公開した後にファイルがそこにあると言うことができます。ただし、これにもバグがあることに注意してください。 「bin \」以外の出力フォルダーを使用すると、aspxファイルはアセンブリが見つからないと不平を言います。 「出力ディレクトリにコピー」を「常にコピー」に設定しても、「Global.asax.cs」が見つからなかったと文句を言うでしょう。

以下の関連質問をご覧ください。

パーサーエラーメッセージ:タイプ 'TestMvcApplication.MvcApplication'をロードできませんでした

"タイプ[名前空間] .Globalをロードできませんでした"が原因で悲しみになります

これは、Visual Studioの新しいバージョンで修正/改善されていますか?

38
Nuno

MSBuild.WebApplication.CopyContentLinkedFiles NuGetが役立ちます。このパッケージは、ビルド中にWebアプリケーションフォルダーへのリンクとして追加されたすべてのコンテンツファイルをコピーするMSBuildターゲットを追加します。

12
Dejan

最善の方法の1つは、必要に応じてシンボリックリンクを作成することだと思います。常に同じである必要があるファイルを管理すると役立ちます。

0
jornathan

目的がコンテンツフォルダー(スクリプト、画像など)を含めることである場合、個々のファイルを管理しないでください。代わりに、ビルドおよび公開ファイルにこれらのフォルダーを含めます。

ファイルを追加/削除する必要がある場合は、コンテンツフォルダーでファイルを更新するだけです。ヘルプファイルは開発者によって管理されていないため、これが基本的にヘルプファイルを処理する方法です。

これらのリンクをチェックしてください:

コンテンツファイルをasp.netプロジェクトファイルに自動的に含める方法はありますか?

Visual Studioを使用したASP.NET Web配置:追加ファイルの配置

0
Keith