簡體   English   中英

使用csproj do.netcore將文件復制到output目錄

[英]Copy files to output directory using csproj dotnetcore

所以我的問題很簡單。 我有一些文件要復制到構建 output 目錄,無論是調試構建還是發布發布。 我能找到的所有信息都是關於舊的 json 配置方法的。 有人有將 csproj 與 do.netcore 一起使用的示例嗎?

有很多方法可以實現您的目標,具體取決於您的需求。

最簡單的方法是CopyToOutputDirectory設置元數據( CopyToOutputDirectory / CopyToPublishDirectory )項目(假設.txtNone項目而不是Content ,如果它不起作用,請嘗試<Content>代替):

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <None Update="foo.txt" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

如果需要更多控制,最通用的方法是在 csproj 文件中添加掛鈎到構建過程的自定義目標:

<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" />
</Target>
<Target Name="CopyCustomContentOnPublish" AfterTargets="Publish">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(PublishDir)" />
</Target>

這會將文件復制到相應的目錄。 有關<Copy>任務的更多選項,請參閱其文檔 要將其限制為某些配置,您可以使用Condition屬性:

<Target … Condition=" '$(Configuration)' == 'Release' ">

Condition屬性既可以應用於<Target>元素,也可以應用於諸如<Copy>類的任務元素。

雖然這幫助我解決了我的問題,但它不適用於子目錄中的所有文件。 我還使用了Content Include而不是Content Update

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="layouts\*.*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>  
  </ItemGroup>

</Project>

假設您的根目錄中有一個assets文件夾。 您可以隨意命名。 這只是一個例子:

你的項目.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <AssetsSourceFiles Include="assets/**/*.*"/>
  </ItemGroup>

  <Target Name="CopyCustomContent" AfterTargets="AfterBuild">
    <Copy SourceFiles="@(AssetsSourceFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" />
  </Target>
</Project>

這僅將assets文件夾的內容復制到輸出根目錄,而不將其包裝到assets文件夾中。 但是如果你想和文件夾本身一起復制,你可以使用下面的代碼:

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <Content Include="assets\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

將它放在您的 .csproj 文件中,用所需的文件路徑替換 nlog.config。 然后只需保存它並構建您的項目:

<ItemGroup>
  <Content Update="Nlog.config">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
</ItemGroup>

例如,您有一個名為test.txt的文件。 要將始終復制到此文件,您需要將此部分添加到您的 .csproj 文件中:

<ItemGroup>
    <None Include="test.txt">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

我要求選擇 HTML 模板在客戶端和服務器端都可以使用(Handlebars js)

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Content Update="wwwroot\html-templates\**\*.*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

</Project>

如果需要將特定 NuGet 包強制復制到 ASP.NET Core 項目 (2.2) 中,請在 csproj 的末尾添加:

<!-- Force copy MathNet because we need it in compilation -->
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="Build">
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll'))" />
</Target>

<ItemGroup>
    <ContentWithTargetPath Include="..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <TargetPath>MathNet.Numerics.dll</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>
<PropertyGroup>
    <PostBuildEvent>xcopy "$(ProjectDir)Xml" "$(ProjectDir)$(OutDir)Xml" /S /F /I /R /Y</PostBuildEvent>
</PropertyGroup>

<PropertyGroup>
    <PostBuildEvent>copy /Y "$(ProjectDir)MyXml.xml" "$(ProjectDir)$(OutDir)Xml"</PostBuildEvent>
</PropertyGroup>

這會將完整目錄復制到具有適當名稱的子目錄中。

<ItemGroup>
    <Content 
      Include="..\libs\x64\**\*.*"
      CopyToOutputDirectory="Always"
      TargetPath="x64\%(Filename)%(Extension)"
    />
</ItemGroup>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM