gpt4 book ai didi

c# - 使用 C# 进行异地构建

转载 作者:行者123 更新时间:2023-11-30 12:19:22 26 4
gpt4 key购买 nike

我刚刚使用继承的属性表为我们现有的 C++ 代码设置了一个异地构建系统,该功能似乎特定于 Visual C++ 产品。异地构建需要更改许多项目设置,而继承的属性表允许我仅通过将属性表附加到项目来更改所有必要的设置。我正在将我们的团队从用于 UI 的 C++/MFC 迁移到 C# 和 WPF,但我需要提供相同的异地构建功能,希望具有相同的便利性。我似乎找不到对 C# 项目执行此操作的方法 - 我首先查看是否可以引用 MsBuild 目标文件,但找不到执行此操作的方法。我知道我可以只使用 MsBuild 来完成整个事情,但这似乎比必要的更复杂。例如,有没有一种方法可以为目录定义宏并在输出路径中使用它?

最佳答案

我不太确定什么是“不合适的”构建系统,但是如果您只需要能够将编译后的文件(或其他资源)复制到其他目录,您可以通过绑定(bind)到MSBuild 构建目标。

在我们的项目中,我们将编译后的 dll 移动到 lib 文件夹中,并在构建完成后将文件放入适当的位置。为此,我们创建了一个自定义构建 .target 文件,该文件创建了 TargetPropertyItemGroup然后我们使用它来填充我们的外部输出文件夹。

我们的自定义目标文件看起来有点像这样:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectName>TheProject</ProjectName>
<ProjectDepthPath>..\..\</ProjectDepthPath>
<ProjectsLibFolder>..\..\lib\</ProjectsLibFolder>

<LibFolder>$(ProjectsLibFolder)$(ProjectName)\$(Configuration)\</LibFolder>
</PropertyGroup>

<Target Name="DeleteLibFiles">
<Delete Files="@(LibFiles-> '$(ProjectDepthPath)$(LibFolder)%(filename)%(extension)')" TreatErrorsAsWarnings="true" />
</Target>
<Target Name="CopyLibFiles">
<Copy SourceFiles="@(LibFiles)" DestinationFolder="$(ProjectDepthPath)$(LibFolder)" SkipUnchangedFiles="True" />
</Target>

<ItemGroup>
<LibFiles Include=" ">
<Visible>false</Visible>
</LibFiles>
</ItemGroup>
</Project>

然后 Visual Studio 中的 .csproj 文件与这个自定义目标文件集成:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" ... >
...
<Import Project="..\..\..\..\build\OurBuildTargets.targets" />
<ItemGroup>
<LibFiles Include="$(OutputPath)$(AssemblyName).dll">
<Visible>false</Visible>
</LibFiles>
</ItemGroup>
<Target Name="BeforeClean" DependsOnTargets="DeleteLibFiles" />
<Target Name="AfterBuild" DependsOnTargets="CopyLibFiles" />
</Project>

简而言之,这个构建脚本首先告诉 MSBuild 加载我们的自定义构建脚本,然后将编译后的文件添加到 LibFiles ItemGroup,最后绑定(bind)我们的自定义构建目标,DeleteLibFilesCopyLibFiles,进入构建过程。我们为解决方案中的每个项目设置了此设置,因此只有更新的文件才会被删除/复制,并且每个项目对其自己的文件(dll、图像等)负责。

希望对您有所帮助。如果我误解了你所说的异地构建系统的意思,我深表歉意,这对你来说完全没用!

关于c# - 使用 C# 进行异地构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com