Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSBuild:导入项目的输出属性_Msbuild - Fatal编程技术网

MSBuild:导入项目的输出属性

MSBuild:导入项目的输出属性,msbuild,Msbuild,假设我有一个build.proj,如下所示: <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="AfterBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Cu

假设我有一个build.proj,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
         DefaultTargets="AfterBuild"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <CustomAfterMicrosoftCSharpTargets>$(MSBuildThisFileDirectory)Common.Build.targets</CustomAfterMicrosoftCSharpTargets>
        <Configuration>Release</Configuration>
        <Platform>Any CPU</Platform>
        <ProjectProperties>
            Configuration=$(Configuration);
            Platform=$(Platform);
            CustomAfterMicrosoftCSharpTargets=$(CustomAfterMicrosoftCSharpTargets);
        </ProjectProperties>
    </PropertyGroup>

    <ItemGroup>
        <ProjectToBuild Include="$(MSBuildThisFileDirectory)src\Proj\MyApp.csproj" />
    </ItemGroup>

    <Target Name="Build">
        <MSBuild Targets="Build"
                 Projects="@(ProjectToBuild)"
                 Properties="$(ProjectProperties)" />
    </Target>

    <Target Name="AfterBuild" DependsOn="Build">
        <Message Text="ChildProperty: $(ChildProperty)" />
    </Target>
</Project>
现在,如果我构建build.proj,我在消息中看不到ChildProperty的值。输出为空:ChildProperty:

我的印象是,目标的任何输出在执行后都会合并回全局上下文。但它似乎只适用于目标文件中的任何内容

如何使ChildProperty冒泡到父build.proj?

在依赖项目上调用任务时,请读取任务的targetOutput输出参数。参见以下示例:


试过了,但没用。AssembliesBuiltByChildProjects为空。这就解释了为什么:只返回指定目标的输出,而不返回这些目标所依赖的目标上可能存在的任何输出。@Mrchief,为什么您希望不是这样?当您在C中调用一个返回某个对象的函数时,您看不到该返回是该函数调用的所有内容的某种聚合。当然,调用函数与调用MSBuild中的目标并不是直接的类比,但有点接近。当您需要特定目标的输出时,请使用MSBuild任务或CallTarget任务调用它并使用输出值。我不希望这样。我的问题特别是关于冒泡由一个子目标创建的属性。我同意在全局范围内创建属性,问题是-如何创建?子函数总是可以写入全局变量,是吗?我们不要讨论全局变量是一场邪恶的辩论。我只想把一处房产泡起来。
<Target Name="DoSomethingUseful">
    <!-- Do something useful -->
    <CreateProperty Value="SomeComputedThingy">
        <Output TaskParameter="Value" PropertyName="ChildProperty"/>
    </CreateProperty>
</Target>
<Target Name="BuildOtherProjects">
    <MSBuild
        Projects="@(ProjectReferences)"
        Targets="Build">
        <Output
            TaskParameter="TargetOutputs"
            ItemName="AssembliesBuiltByChildProjects" />
    </MSBuild>
</Target>
<Target Name="MyTarget" Inputs="..." Outputs="..." Returns="$(MyOutputValue)">
    <PropertyGroup>
        <MyOutputValue>set it here</MyOutputValue>
    </PropertyGroup>
</Target>