我只是完成设置一个外的地方建立系统对于我们现有的C++代码使用继承的财产表,一个特征,这似乎是特定的视觉C++的产品。建筑外的地方需要的许多项目设置进行改变,并且继承了酒店床单我要改变所有必要的设置,只是通过附属片的项目。我迁移我们的团队从C++/MFC UI C#和WPF,但我需要提供相同的地方建立的功能,希望有相同的便利。我似乎无法找到一种方法来这样做C#项目-我第一次看看如果我可以引用一个MsBuild目标文件,但未能找到一种方法来做到这一点。我知道我可能只使用MsBuild用于整个事情,但是,这似乎更复杂的不必要的。有没有办法我可以定义的宏目录和利用它在输出的路径,例如?

有帮助吗?

解决方案

我不是很确定什么是"开放"建立系统,但是如果你只是需要能够复制汇编的文件(或其他资源)的其他目录可以通过捆绑到请参阅建立的目标。

在我们的项目,我们移动编dll入lib文件夹和把文件放到适当的位置之后建立完成。要做到这一点,我们已经创建了一个定制的建立。目标文件,创造了 Target's, Property's, ItemGroup's,然后我们用来填充我们的外输出的文件夹。

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

<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>

。csproj文件在Visual Studio然后整合这个定义目标的文件:

<?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 项组进行,并最后联系我们自定义的建立目标, DeleteLibFilesCopyLibFiles, ,进入建立过程。我们设置为每个项目在我们解决方案,使文件更新删除/复制和每个项目负责它自己的文件(dll、图像,等等)。

我希望这有所帮助。我很抱歉,如果我误会了你是什么意思的地方建立系统和这个是完全没用的,你!

其他提示

有没有办法我可以定义的宏目录和利用它在输出的路径

你有没有看着前的建立和后建立的事件的一个项目?

实际上,预先建立和后建立的事件似乎仅仅是一个地方添加批处理的文件种类型的命令。这不会帮助我设置了标准建立目录,我们的项目,不幸的。并具有这些活动创造 批文件 似乎是一个非常1980年的做法,为一个现代化的语言,比如,海事组织。

后挖掘更多一些,并且试验,我们发现,你可以添加一个 <Import> 指令纳入你的.csproj文件。当你这样做,IDE会弹出一个警告对话,有一个不安全入口点项目中的-但你可以忽视这一点,并可以使它不会出现在所有通过在编辑一个注册条目,显然.因此,这会给我一种方式来获得的变量包含的目录路径我需要进入。csproj文件。

现在得到输出的路径提到它-不幸的是当你加入一串像"$(MySpecialPath)/Debug"输出路的领域,并保存项目、美元和()文字转换为hex,和你的文件是放在一个"调试"目录中的下一个目录,名为"$(MySpecialPath)".Arrgghh.如果编辑。csproj文件中的一个文本编辑器,可以设置正确,但是,似乎工作,只要的 <Import> 标记出现之前 <PropertyGroup> 含有输出的路径。

因此,我认为解决对我来说将是创建一个标准我们团队.目标MsBuild文件在标准的位置,增加一个安装于改变注册,所以它不会标志的警告,然后建立的定制项目模板, <Import> 这个文件,并且也设定输出的路径,使用"属性"的定义在我们团队.目标的文件。可悲的是,这是更多工作和一个小优雅的解决方案于属片的继承机制,在C++。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top