为什么MSBuild有时会忽略TargetFrameworkVersion?

时间:2019-03-30 16:53:50

标签: c# .net msbuild

我正在自动批处理文件中运行msbuild命令。有时,msbuild会忽略我指定的目标框架。这似乎是随机发生的,而且经常使我的工作变慢。

这是设置目标框架的csproj文件的一部分:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" 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>{1B0B7E3B-8708-4799-B768-1949DA9DD755}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>WithoutHaste.DataFiles</RootNamespace>
    <AssemblyName>WithoutHaste.DataFiles</AssemblyName>
    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

当我注意到这种情况时,我也开始在msbuild命令中指定目标框架。这应该覆盖csproj文件中的任何设置。

msbuild DataFiles.net20.csproj /P:TargetFrameworkVersion=v2.0;Configuration=Debug -fl -flp:logfile=logs\DataFilesOutput.net20.Debug.log;verbosity=normal

我已经确认编译后的库针对的框架错误。
1)将库添加到.Net 2.0项目时,出现“间接依赖项”错误。查看库属性还显示将“运行时版本”设置为“ v4.0”,而不是“ v2.0”。
2)使用反射加载程序集,Assembly.ImageRuntimeVersion设置为“ v4.0”,而不是“ v2.0”。

有什么想法为什么有时会发生?

0 个答案:

没有答案