Свойства MSBuild пусты для проекта .NETStandard lib

Когда я пытаюсь использовать свойства msbuild, такие как $(TargetFrameworkSDKToolsDirectory) или $(SDKToolsPath), в настраиваемой цели сборки для библиотеки .NETStandard, эти свойства пусты/не определены. Однако использование точно такой же цели сборки для сборки .NET 4.6.2 работает нормально. Есть ли файлы .targets, которые мне нужно вручную включить для .NETStandard, или что еще я мог упустить?

Импорт $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props не помогает. Я использую сообщество Visual Studio 2017.

*.csproj для библиотеки .NETStandard:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard1.4</TargetFramework>
        <RootNamespace>MyNamespace</RootNamespace>
        <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
    </PropertyGroup>
    <!--
    ItemGroups for files and references
    -->
    <Target Name="PropsTest" BeforeTargets="CoreCompile">
        <!-- Prints: "Path: " -->
        <Message Text="Path: $(TargetFrameworkSDKToolsDirectory)" Importance="high" />
    </Target>
</Project>

*.csproj для приложения .NET 4.6.2:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
    <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProjectGuid>{73E77BB7-D3F9-4797-B62D-24666D1132EF}</ProjectGuid>
        <OutputType>Exe</OutputType>
        <RootNamespace>SamplesConsole</RootNamespace>
        <AssemblyName>SamplesConsole</AssemblyName>
        <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
        <FileAlignment>512</FileAlignment>
        <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
        <TargetFrameworkProfile />
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <PlatformTarget>AnyCPU</PlatformTarget>
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <PlatformTarget>AnyCPU</PlatformTarget>
        <DebugType>pdbonly</DebugType>
        <Optimize>true</Optimize>
        <OutputPath>bin\Release\</OutputPath>
        <DefineConstants>TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
    </PropertyGroup>
    <!--
    ItemGroups for files and references
    -->
    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    <Target Name="PropsTest" BeforeTargets="CoreCompile">
        <!-- Prints: "Path: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\" -->
        <Message Text="Path: $(TargetFrameworkSDKToolsDirectory)" Importance="high" />
    </Target>
</Project>

person ArgusMagnus    schedule 15.03.2017    source источник
comment
Предполагается, что проекты .NETStandard совместимы с целевыми платформами, такими как iOS, Android, Linux и т. д. Нет никакого смысла делать что-либо с Windows SDK. Избегайте вопросов XY.   -  person Hans Passant    schedule 15.03.2017
comment
В частности, я хочу использовать ildasm/ilasm. Есть ли другой способ их использовать тогда? Функциональность должна быть доступна на других платформах, не так ли? Кроме того, что вы имеете в виду под избеганием вопросов XY?   -  person ArgusMagnus    schedule 15.03.2017
comment
Хорошо, теперь я знаю, что такое вопрос XY (meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Какое неописательное имя ... Должен ли я удалить этот вопрос или оставить его для других, которые попробуют тот же (глупый) подход, что и я?   -  person ArgusMagnus    schedule 15.03.2017


Ответы (1)


Для библиотеки .NET 4.6.2 свойство TargetFrameworkSDKToolsDirectory задается Microsoft.NETFramework.CurrentVersion.props.

Он устанавливается с помощью $(SDK35ToolsPath) или $(SDK40ToolsPath).

Свойство SDK40ToolsPath доступно в сборке стандартной библиотеки .NET, хотя TargetFrameworkSDKToolsDirectory недоступно.

person JustinH    schedule 15.03.2017
comment
Спасибо, это именно то, что мне было нужно! - person ArgusMagnus; 15.03.2017