在默认的 VisualStudio 可以右击任意的文件,让这个文件在编译时复制到输出目录,但是这个选项将会在复制到输出目录时带上这个文件所在 VisualStudio 的文件夹结构。本文告诉大家几个方法让 VisualStudio 的文件可以在编译时输出到自定义的任意路径
文件夹到文件夹
将整个文件夹内容输出到自定义文件夹可以使用写一个 Target 的方法
如我需要将 VisualStudio 的 dll
文件夹的内容全部输出到输出目录,而不是输出到 输出目录下的 Dll 文件夹,可以使用下面代码
1 2 3 4 5 6 7 |
<Target Name="CopyReferenceDll" AfterTargets="Build"> <ItemGroup> <ReferenceDll Include="Dll\*.dll"> </ReferenceDll> </ItemGroup> <Copy SourceFiles="@(ReferenceDll)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="True"></Copy> </Target> |
将上面代码复制到 csproj 文件里面,放在 </Project>
之前就可以做到将 VisualStudio 里面的 Dll 文件夹的 dll
文件复制到输出文件夹
至于需要输出其他文件到其他文件夹的,可根据上面代码做相应修改
用 Link 修改路径
通过修改文件链接的地址,这个方法只能输出到输出文件夹内某个文件夹下
1 2 3 4 5 |
<ItemGroup> <None Update="Dll\*.dll" Link="%(Filename)%(Extension)"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup> |
此时的 Dll 文件夹的 dll 文件,将会重新链接到 *.dll
路径而不是 Dll\*.dll
但是此时会在 VisualStudio 看到项目的根文件夹存在很多 dll 文件
如果不想看到这些文件通过 Visible
属性
1 2 3 4 5 |
<ItemGroup> <None Update="Dll\*.dll" Link="%(Filename)%(Extension)" Visible="false"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup> |
通过 ContentWithTargetPath 项
将原本的 None 替换为 ContentWithTargetPath 项,这个项提供 TargetPath 属性,设置输出的文件
1 2 3 4 5 6 |
<ItemGroup> <ContentWithTargetPath Include="Dll\*.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <TargetPath>%(Filename)%(Extension)</TargetPath> </ContentWithTargetPath> </ItemGroup> |
这个方法底层也是调用了 Copy 命令
适合文件到文件的方式,将 %(Filename)%(Extension)
替换为具体文件,如将某个文件复制到指定的路径
1 2 3 4 5 6 |
<ItemGroup> <ContentWithTargetPath Include="Dll\lindexi.dll"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <TargetPath>lindexi.dll</TargetPath> </ContentWithTargetPath> </ItemGroup> |