ディレクトリから特定のファイルを/bin/
フォルダーにコピーしたいVS2008があります。ファイル(/common/browserhawk/
にあります)を「出力ディレクトリにコピー」に設定しました。ただし、フォルダー構造もコピーされます。ファイルは/bin/common/browserhawk/
にコピーされます
これらのファイルを/bin/
だけにコピーするにはどうすればよいですか?これらを正しくコピーするために、これらをWebサイトのルートに保存したくありません。
ビルド後イベントを追加して、ファイルをコピーできます。
プロジェクトプロパティの[ビルドイベント]タブに移動し、ビルド後のイベントコマンドラインに次を追加します。
copy "$(ProjectDir)\common\browserhawk\*.*" "$(TargetDir)"
プロジェクトパスにスペースが含まれている場合は、引用符を必ず含めてください。
以前の回答についてコメントできないため、ここに解決策を示します。
@PaulAlexanderが提供したものに追加して、次を.csproj/.vbprojファイルに追加します。
<ItemGroup>
<AvailableItemName Include="RootContent">
<Visible>false</Visible>
</AvailableItemName>
</ItemGroup>
<Target Name="AfterBuild">
<Copy
DestinationFolder="$(OutputPath)"
SourceFiles="@(RootContent)"
SkipUnchangedFiles="true"
/>
</Target>
これにより、[プロパティ]ウィンドウでビルドアクションとして[RootContent]を選択でき、GUIからすべてにアクセスできます。より完全な説明:「AvailableItemName」オプションは基本的に、プロジェクト内のアイテムを割り当てることができる新しい名前付きリストを作成します。これは、「プロパティー」ウィンドウの「ビルドアクション」プロパティーの下にあります。その後、この新しく作成したリストを任意のターゲットで使用できます(たとえば、「@(RootContent)」を使用)。
テキストエディタで.csproj/.vbprojを編集する場合、出力ディレクトリ内のファイルの場所と、出力ディレクトリ内のファイルの名前を制御できます。例えば:
<None Include="content\someContent.txt">
<Link>someContentInOutputDirectory.txt</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
これにより、ファイルcontent\someContent.txt
into bin\someContentInOutputDirectory.txt
。必要に応じて、bin
のサブディレクトリを選択することもできます。それをLink要素に追加するだけです。
XCOPYコマンドはディレクトリとファイルをより適切に処理できると思います。したがって、
XCOPY "$(ProjectDir)common/browserhawk" "$(TargetDir)" /E /I /F /Y
これにより、ターゲットディレクトリからフォルダーを作成できます。
XCOPY "$(ProjectDir)Templates" "$(TargetDir)" /E /I /F /Y
プロジェクトフォルダー/ファイル構造:
A:\TEMP\CONSOLEAPPLICATION3\TEMPLATES
├───NewFolder1
├───NewFolder2
│ TextFile1.txt
│ TextFile2.txt
└───NewFolder3
TextFile1.txt
TextFile2.txt
TextFile3.txt
になる:
A:\TEMP\CONSOLEAPPLICATION3\BIN\DEBUG
│ ConsoleApplication3.exe
│ ConsoleApplication3.pdb
│ ConsoleApplication3.vshost.exe
│ ConsoleApplication3.vshost.exe.manifest
├───NewFolder1
├───NewFolder2
│ TextFile1.txt
│ TextFile2.txt
│
└───NewFolder3
TextFile1.txt
TextFile2.txt
TextFile3.txt
次を.csproj/.vbprojファイルに追加します
<Target Name="AfterBuild">
<Copy
DestinationFolder="$(OutputPath)"
SourceFiles="@(RootContent)"
SkipUnchangedFiles="true"
/>
</Target>
次に、ルートフォルダー内の任意のファイルのビルドアクションをRootContentに変更します。
これをVS2010とVS2015で使用しました。私はこのソリューションが好きです:
<RootContent Include="common\browserhawk\**"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </RootContent>
プロジェクトファイルの先頭へ:
<ItemGroup>
<AvailableItemName Include="RootContent">
<!-- Add "RootContent" as a choice in the "Build Action" dropdown. -->
<Visible>False</Visible>
</AvailableItemName>
</ItemGroup>
Microsoft .targetsインポート後:
<PropertyGroup>
<AssignTargetPathsDependsOn>
$(AssignTargetPathsDependsOn);
IncludeRootContentAsContent;
</AssignTargetPathsDependsOn>
</PropertyGroup>
<Target Name="IncludeRootContentAsContent">
<CreateItem Include="@(RootContent)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(Extension)">
<Output ItemName="ContentWithTargetPath" TaskParameter="Include" />
</CreateItem>
</Target>
最終的にコンパイルが成功した後にコピーするステップをnantビルドファイルに追加することになりました
<target name="action.copy.browserhawk.config" depends="compile.source">
<copy todir="${App.Web.dir}/bin/" includeemptydirs="false">
<fileset basedir="${browserhawk.config.dir}">
<include name="bhawk_bb.dat" />
<include name="bhawk_sp.dat" />
<include name="browserhawk.properties" />
<include name="maindefs.bdd" />
<include name="maindefs.bdf" />
<include name="BH_PRO.lic" />
</fileset>
</copy>
<echo message="COPY BROWSERHAWK CONFIG: SUCCESS ${datetime::now()}" />
</target>
バッチファイルをビルドしてファイルをコピーし、ビルド後イベントとして実行できます。