Ste*_*ght 87 msbuild visual-studio-2008
我有一个VS2008我想将目录中的某些文件复制到我的/bin/文件夹中.我已将文件(位于/common/browserhawk/)设置为"复制到输出目录".但是,它也会复制文件夹结构:文件被复制到/bin/common/browserhawk/
如何将这些文件复制到只是/bin/?我不想将它们存储在网站的根目录中以使它们正确复制.
小智 58
您可以添加Post Build Event来复制文件.
转到项目属性,"构建事件"选项卡,并将以下内容添加到Post-build事件命令行:
copy "$(ProjectDir)\common\browserhawk\*.*" "$(TargetDir)"
Run Code Online (Sandbox Code Playgroud)
如果项目路径中包含空格,请务必包含引号.
sho*_*ave 44
由于我无法评论以前的答案,我将把解决方案放在这里:
添加@PaulAlexander提供的内容,将以下内容添加到.csproj/.vbproj文件中:
<ItemGroup>
<AvailableItemName Include="RootContent">
<Visible>false</Visible>
</AvailableItemName>
</ItemGroup>
<Target Name="AfterBuild">
<Copy
DestinationFolder="$(OutputPath)"
SourceFiles="@(RootContent)"
SkipUnchangedFiles="true"
/>
</Target>
Run Code Online (Sandbox Code Playgroud)
这允许您在"属性"窗口中选择"RootContent"作为"构建操作",并且可以通过GUI访问所有内容.更完整的解释:"AvailableItemName"选项基本上创建了一个新的命名列表,您可以将项目中的项目分配到"属性"窗口中的"构建操作"属性下.然后,您可以在任何您喜欢的目标中使用这个新创建的列表(例如,通过"@(RootContent)").
Dan*_*sky 43
如果在文本编辑器中编辑.csproj/.vbproj,则可以控制文件在输出目录中的放置位置,以及文件在输出目录中的名称.例如:
<None Include="content\someContent.txt">
<Link>someContentInOutputDirectory.txt</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)
这将把文件content\someContent.txt放入bin\someContentInOutputDirectory.txt.bin如果需要,您也可以选择一个子目录; 只需将其添加到Link元素即可.
AMi*_*ico 15
我相信XCOPY命令可以更好地处理目录和文件.因此,
XCOPY "$(ProjectDir)common/browserhawk" "$(TargetDir)" /E /I /F /Y
Run Code Online (Sandbox Code Playgroud)
这允许从目标目录创建文件夹.
XCOPY "$(ProjectDir)Templates" "$(TargetDir)" /E /I /F /Y
Run Code Online (Sandbox Code Playgroud)
Project文件夹/文件结构:
A:\TEMP\CONSOLEAPPLICATION3\TEMPLATES
????NewFolder1
????NewFolder2
? TextFile1.txt
? TextFile2.txt
????NewFolder3
TextFile1.txt
TextFile2.txt
TextFile3.txt
Run Code Online (Sandbox Code Playgroud)
变为:
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
Run Code Online (Sandbox Code Playgroud)
Pau*_*der 10
将以下内容添加到.csproj/.vbproj文件中
<Target Name="AfterBuild">
<Copy
DestinationFolder="$(OutputPath)"
SourceFiles="@(RootContent)"
SkipUnchangedFiles="true"
/>
</Target>
Run Code Online (Sandbox Code Playgroud)
然后将根文件夹中所需的任何文件的Build Action更改为RootContent.
我在VS2010和VS2015中使用过它.我更喜欢这个解决方案因为
Run Code Online (Sandbox Code Playgroud)<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>
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)