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)SomeSubFolderSomeContentFile.cfs" "$(TargetDir)SomeSubFolder" /Y /F</PostBuildEvent> </PropertyGroup> 也许有超越_CopyOutOfDateSourceItemsToOutputDirectory *任务like this的智能变体.但我的变体现在让我满意.因为我的项目中没有其他内容文件的依赖项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |