Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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
C# .NETStandard lib项目的MSBuild属性为空_C#_Msbuild_.net Standard - Fatal编程技术网

C# .NETStandard lib项目的MSBuild属性为空

C# .NETStandard lib项目的MSBuild属性为空,c#,msbuild,.net-standard,C#,Msbuild,.net Standard,当我尝试在.NETStandard库的自定义生成目标中使用msbuild属性,如$(targetFrameworkDKToolsDirectory)或$(SDKToolsPath),这些属性为空/未定义。但是,对.NET4.6.2程序集使用完全相同的构建目标可以很好地工作。是否有.NETStandard需要手动包含的.targets文件,或者我可能会缺少什么 导入$(MSBuildExtensionPath)\$(MSBuildToolsVersion)\Microsoft.Common.pro

当我尝试在.NETStandard库的自定义生成目标中使用msbuild属性,如
$(targetFrameworkDKToolsDirectory)
$(SDKToolsPath)
,这些属性为空/未定义。但是,对.NET4.6.2程序集使用完全相同的构建目标可以很好地工作。是否有.NETStandard需要手动包含的.targets文件,或者我可能会缺少什么

导入
$(MSBuildExtensionPath)\$(MSBuildToolsVersion)\Microsoft.Common.props
没有帮助。我正在使用Visual Studio 2017社区

*.NETStandard lib的.csproj:

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

netstandard1.4
MyNamespace
真的
*.NET 4.6.2应用程序的.csproj:

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

调试
任意CPU
{73E77BB7-D3F9-4797-B62D-246666D1132EF}
Exe
样品控制台
样品控制台
v4.6.2
512
真的
任意CPU
真的
满的
假的
bin\Debug\
调试;痕迹
促使
4.
任意CPU
pdbonly
真的
bin\Release\
痕迹
促使
4.

对于.NET 4.6.2库,TargetFrameworkDKTools目录属性由Microsoft.NETFramework.CurrentVersion.props设置

它使用$(SDK35ToolsPath)或$(SDK40ToolsPath)设置


SDK40ToolsPath属性在.NET标准库版本中可用,即使TargetFrameworkDKToolsDirectory不可用。

。NETStandard项目应该与iOS、Android、Linux等平台目标兼容。使用Windows SDK做任何事情都毫无意义。避免XY问题。特别是我想使用ildasm/ilasm。那么,还有其他方法使用它们吗?该功能应该在其他平台上可用,不是吗?还有,你说的“避免XY问题”是什么意思?好的,我现在知道XY问题是什么()。多么不起眼的名字。。。我应该删除这个问题还是把它留给其他和我一样尝试(愚蠢)方法的人?谢谢,这正是我需要的!