使用新的.csproj在发行版中进行编译会生成与旧.csproj相比的不同.dll

时间:2018-03-28 13:06:31

标签: c# msbuild visual-studio-2017 csproj

我已经使用VS2015创建了一个类库,现在我必须添加多目标支持。

由于新的VS2017 .csproj格式以非常简洁的方式处理它,我决定迁移到新格式。所以现在我的.csproj看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net452;net46</TargetFrameworks>
    <Description>My description</Description>
    <Authors>me</Authors>
    <Copyright>Copyright ©  2017</Copyright>
    <AssemblyVersion>1.0.1.1</AssemblyVersion>
    <AssemblyFileVersion>1.0.1.1</AssemblyFileVersion>
    <Configurations>Debug;Release</Configurations>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
  </PropertyGroup>
  <PropertyGroup>
    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
    <Version>1.0.1.1</Version>
    <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="AutoMapper" Version="4.2.1" />
  </ItemGroup>
</Project>

检查bin文件夹,我注意到两个目标的dll大小匹配(当我使用旧的csproj格式编译时没有发生),所以我想知道两个文件是否具有相同的内容

有办法检查吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

  

使用新的.csproj在发布版中进行编译会生成与旧的.csproj不同的.dll

正如您所看到的,新的.csproj格式已经变得非常小,并且它的可读性也更高。大多数魔法都是通过Project元素的Sdk属性发生的。所以我们称这些新项目为基于SDK的项目。

当我们从旧的.csproj格式项目构建时,AssemblyInfo.cs文件中的所有内容都将插入到dll中,但是当您使用新的.csproj格式构建时,新的{{ 1}}生成自己的.csproj。但是,AssemblyInfo.csInternalsVisibleToAttribute和其他未自动生成的内容。那是Lex说的,“ C#编译器确实插入了至少一些不同的项目,例如TargetFrameworkAttribute ”。所以它与CLSCompliantAttribute不同。因此,这应该导致文件大小的微小差异。

此外,当您使用其他工具检查dll时,大多数这些工具会检查dll中的方法和类,而不是那些属性,这就是为什么代码在由两者构建的程序集上看起来相同的原因旧的和新的csproj,但文件大小不同。

希望这有帮助。