moh*_*eli 5 msbuild .net-core visual-studio-2017
我试图集中许多项目的一些构建配置,而 MSBuild 解决方案是使用.targetsfiles。
我想应用于所有项目的一种配置是防止netcoreapp2.1附加到所有输出目录。要实现这一点,只需包含这一行配置即可:
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
Run Code Online (Sandbox Code Playgroud)
但是,当我将此行放入Common.targets文件中,并使用 将该文件包含在我的.csproj文件中<Import Project="PathToCommonTargets" />时,它没有任何效果,我仍然netcoreapp2.1在输出文件夹的末尾得到 。
我该如何解决这个问题?
原因更新:
我们是一家与其他 10 多家公司的技术合作伙伴的公司。也就是说,我们有一个针对基础设施的中央源代码控制(假设映射到C:\Infra),并且对于每个公司都有一个不同的源代码控制(假设映射到C:\CompanyA和C:\CompanyB等),其中可能包含多达 100 个解决方案,每个解决方案可能包含更多超过10个项目。因此,我们的首要要求是通过干燥所有内容(从 Angular 到 Java、Swift 和 .NET)来尽可能降低成本。基于持续改进的精神,我们不希望将输出放入\bin\Debug\netcoreapp2.1超过 2000 个项目文件(并且还在不断增加),以减少开发人员花在输出文件夹上的时间,并使重构到更高版本的 .NET 变得更容易而且更便宜。由于自动化中的输出路径,从 升级netcoreapp2.0到我们做了噩梦。netcoreapp2.1这就是我们尝试使用AppendTargetFrameworkToOutputPath. 但我真的很沮丧,为什么事情会如此具有挑战性。对我来说,MSBuild 应该首先加载所有内容,然后开始构建。这样,布尔属性将在构建管道期间随处出现,并且不需要如此复杂的配置。毕竟,如果布尔属性需要的不仅仅是true/false配置它,那它还有什么用呢?
AppendTargetFrameworkToOutputPath 在 .targets 文件中失败
该属性AppendTargetFrameworkToOutputPath可以阻止MSBuild追加TargetFramework到OutputPath,但是因为TargetFramework我们创建项目时已经生成了该文件夹,所以在添加到项目后我们需要手动删除TargetFramework文件夹<Import Project="PathToCommonTargets" />,否则该文件夹将一直存在,然后我们可以构建项目无需.TargetFrameworkOutputPath
如果TargetFramework删除后仍然生成该文件夹,则应将其内容加倍,.targets并且导入语句正确。为了确保它们,我在.target文件中添加了一个测试自定义目标:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
</PropertyGroup>
<Target Name="Test" AfterTargets="Build">
<Message Text="This is Test Custom Target!"></Message>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
当我们构建项目时,我们可以在输出窗口中看到消息信息,这意味着内容.targets和导入语句是正确的。
更新:
您能帮我了解如何删除 TargetFramework 吗?
要实现此目的,请卸载您的项目。然后在项目的最后,在 end-tag 之前</project>,放置以下脚本:
<Target Name="RemoveDirectories" AfterTargets="Build">
<RemoveDir
Directories="$(ProjectDir)$(OutDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
另外,您需要将文件备份到TargetFrameworkbin\debug 或 bin\release 文件夹中,因此我们还需要在删除任务之前复制任务:
<ItemGroup>
<MySourceFiles Include="$(ProjectDir)$(OutDir)\*.*"/>
</ItemGroup>
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="$(ProjectDir)bin\$(ConfigurationName)"
/>
<RemoveDir
Directories="$(ProjectDir)$(OutDir)" />
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
7557 次 |
| 最近记录: |