访问visual studio 2010中的运行时库属性

时间:2011-10-17 22:53:24

标签: visual-studio-2010 visual-studio

这基本上是一个跟进问题: Using Visual Studio project properties effectively for multiple projects and configurations

我们图书馆的目标名称目前采用以下格式:

$(ProjectName)-$(PlatformToolset)-$(PlatformShortName)-$(Configuration)

我们想要将有关项目使用的运行时库的信息添加到目标名称,我尝试添加$(RuntimeLibrary),但似乎没有设置。在目标名称解析时是否有其他方法可以获取运行时库?

谢谢, 约翰。

1 个答案:

答案 0 :(得分:0)

使用此属性表,您可以执行此操作。将其导入属性表,您就可以通过以下方式访问RuntimeLibrary:$(RuntimeLibrary)

是!!!这将适用于您的属性表= ^。〜=

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <_IsDebug>$([System.Convert]::ToString($([System.Text.RegularExpressions.Regex]::IsMatch($(Configuration),'[Dd]ebug'))))</_IsDebug>

        <_ItemDefinitionGroupRegex><![CDATA[<ItemDefinitionGroup Condition=".*']]>$(Configuration)\|$(Platform)<![CDATA['">((?:.*\n)*?.*)</ItemDefinitionGroup>]]></_ItemDefinitionGroupRegex>
        <_RuntimeLibraryRegex><![CDATA[(?:.*\n)*?.*<RuntimeLibrary>(.*)</RuntimeLibrary>(?:.*\n)*?.*]]></_RuntimeLibraryRegex>

        <_HasRuntimeLibrary>$([System.Text.RegularExpressions.Regex]::IsMatch($([System.Text.RegularExpressions.Regex]::Match($([System.IO.File]::ReadAllText($(ProjectPath))), $(_ItemDefinitionGroupRegex)).Result('$1')), $(_RuntimeLibraryRegex)))</_HasRuntimeLibrary>

        <!-- 
            Fix incremental build (Different results when running msbuild within Visual Studio or from console).
            http://connect.microsoft.com/VisualStudio/feedback/details/677499/different-results-when-running-msbuild-within-visual-studio-or-from-console 
        -->
        <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
    </PropertyGroup>

    <Choose>
        <When Condition="$([System.Convert]::ToBoolean($(_HasRuntimeLibrary)))">
            <!-- Extract runtime library from project file. -->
            <PropertyGroup Label="UserMacros">
                <_RuntimeLibrary>$([System.Text.RegularExpressions.Regex]::Match($([System.Text.RegularExpressions.Regex]::Match($([System.IO.File]::ReadAllText($(ProjectPath))), $(_ItemDefinitionGroupRegex)).Result('$1')), $(_RuntimeLibraryRegex)).Result('$1'))</_RuntimeLibrary>
            </PropertyGroup>
        </When>
        <Otherwise>
            <!-- Set default runtime library -->
            <PropertyGroup Label="UserMacros">
                <_RuntimeLibrary Condition=" '$(_IsDebug)' == 'True' ">MultiThreadedDebugDLL</_RuntimeLibrary>
                <_RuntimeLibrary Condition=" '$(_IsDebug)' == 'False' ">MultiThreadedDLL</_RuntimeLibrary>
            </PropertyGroup>
        </Otherwise>
    </Choose>

    <PropertyGroup Label="UserMacros">
        <IsDebug>$(_IsDebug)</IsDebug>

        <ConfigType Condition=" '$(IsDebug)' == 'True' ">Debug</ConfigType>
        <ConfigType Condition=" '$(IsDebug)' == 'False' ">Release</ConfigType>

        <Architecture Condition=" '$(Platform)' == 'Win32' ">x86</Architecture>
        <Architecture Condition=" '$(Platform)' == 'x64' ">x64</Architecture>

        <Toolset Condition=" '$(PlatformToolset)' == 'v110' ">msvc.110</Toolset>

        <RuntimeLibrary>$(_RuntimeLibrary)</RuntimeLibrary>
    </PropertyGroup>

    <ItemGroup>
        <BuildMacro Include="IsDebug">
            <Value>$(IsDebug)</Value>
        </BuildMacro>
        <BuildMacro Include="Toolset">
            <Value>$(Toolset)</Value>
        </BuildMacro>
        <BuildMacro Include="Architecture">
            <Value>$(Architecture)</Value>
        </BuildMacro>
        <BuildMacro Include="RuntimeLibrary">
            <Value>$(RuntimeLibrary)</Value>
        </BuildMacro>
        <BuildMacro Include="ConfigType">
            <Value>$(ConfigType)</Value>
        </BuildMacro>
    </ItemGroup>
</Project>