C# .NETStandard lib项目的MSBuild属性为空
当我尝试在.NETStandard库的自定义生成目标中使用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
$(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问题是什么()。多么不起眼的名字。。。我应该删除这个问题还是把它留给其他和我一样尝试(愚蠢)方法的人?谢谢,这正是我需要的!