微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – MSBuild在_CopyOutOfDateSourceItemsToOutputDirectory期间复制相关的项目文件

我有一个C#项目,它使用sln文件中的Project Dependencies来确保构建顺序正确.

所以我在我的sln文件中,ProjectB依赖于ProjectA.

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectB","ProjectB.csproj","{E24EAC46-1563-4E73-9411-3F9D2645F77C}"
    ProjectSection(ProjectDependencies) = postProject
        {4A7D6720-4AA1-4F0B-A796-A0436DB3D7D7} = {4A7D6720-4AA1-4F0B-A796-A0436DB3D7D7}
    EndProjectSection
EndProject

ProjectA有一些设置为copyIfNewer的内容.

当我使用Visual Studio构建它时,ProjectA转到它自己的bin文件夹,ProjectB转到它自己的bin文件夹.

但是当我使用MSBuild构建它时,ProjectA的内容也会以某种方式出现在ProjectB的输出文件夹中!

构建日志显示[ProjectB.csproj] _copyOutOfDateSourceItemsToOutputDirectory复制文件.

我的问题是:我如何告诉MSBuild文件不属于该项目而不必复制?

作为一种解决方法,我将ProjectA添加为ProjectReference,其中< Private> False< / Private>这似乎有效,但这不是我想要的解决方案.

解决方法

解决了在ProjectB .csproj文件中覆盖MSBuild任务的麻烦.
(我只在.sln文件中依赖ProjectA,而不是将项目作为ProjectReference添加到ProjectB)

将此目标添加到.csproj文件中:

<Project>
.....
<Target Name="_copyOutOfDateSourceItemsToOutputDirectory" Condition=" '@(_SourceItemsTocopyToOutputDirectory)' != '' " Inputs="@(_SourceItemsTocopyToOutputDirectory)" Outputs="@(_SourceItemsTocopyToOutputDirectory->'$(OutDir)%(TargetPath)')">
        <Message Importance="normal" Text="$(MSBuildProjectName) Skip copy _copyOutOfDateSourceItemsToOutputDirectory" />
      </Target>
      <Target Name="_copyOutOfDateSourceItemsToOutputDirectoryAlways" Condition=" '@(_SourceItemsTocopyToOutputDirectoryAlways)' != '' ">
        <Message Importance="normal" Text="$(MSBuildProjectName) Skip copy _copyOutOfDateSourceItemsToOutputDirectoryAlways" />
      </Target>
</Project>

对于我自己的文件,需要复制到输出目录我是通过postbuild中的XcopY来做的,如:

<PropertyGroup>
    <PostBuildEvent>xcopy "$(ProjectDir)SomeSubFolder\SomeContentFile.cfs" "$(TargetDir)SomeSubFolder\" /Y /F</PostBuildEvent>
  </PropertyGroup>

也许有超越_copyOutOfDateSourceItemsToOutputDirectory *任务like this的智能变体.但我的变体现在让我满意.因为我的项目中没有其他内容文件的依赖项.

原文地址:https://www.jb51.cc/csharp/99804.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐