【问题标题】:Multi-target with .NET Compact Framework 3.5 using new .csproj format?使用新的 .csproj 格式的 .NET Compact Framework 3.5 的多目标?
【发布时间】:2018-03-04 17:20:40
【问题描述】:

有没有办法使用新的.csproj 文件格式来定位 .NET Compact Framework 3.5?我希望能够针对以下框架:

<TargetFrameworks>netstandard2.0;netstandard1.0;net45;net40;net35;net35-cf</TargetFrameworks>

到目前为止我所做的都是基于这个GitHub gist - 详细地说,我做了以下事情:

  1. 已安装 .NET CF 3.5 和 Power Toys
  2. 在文件C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.CSharp.targets 中将$(MSBuildBinPath) 替换为C:\Windows\Microsoft.NET\Framework\v3.5
    • C:\Program Files (x86)\Microsoft.NET\SDK\CompactFramework\v3.5\WindowsCE
    • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\CompactFramework
  3. 在上述文件夹中创建文件RedistList\FrameworkList.xml,内容如下:

    <?xml version="1.0" encoding="utf-8"?> <FileList Redist="Net35-CF" Name=".NET Compact Framework 3.5"> </FileList>

  4. 添加了注册表键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v3.5,Profile=CompactFramework(只是键,没有值)

  5. 创建新项目,设置TargetFrameworks 并为net35-cf 添加条件属性组:
<PropertyGroup Condition="'$(TargetFramework)' == 'net35-cf'">
    <!-- inference fails for this TFM, so specify it by hand -->
    <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <TargetFrameworkProfile>CompactFramework</TargetFrameworkProfile>
    <!-- define compilation constants by hand too -->
    <DefineConstants>NET35_CF;WindowsCE</DefineConstants>
    <!-- disable implicit references, these are specified by hand, below -->
    <DisableImplicitFrameworkReferences>True</DisableImplicitFrameworkReferences>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'net35-cf' ">
    <NoStdLib>True</NoStdLib>
    <NoConfig>true</NoConfig>
    <FileAlignment>512</FileAlignment>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <PlatformID>E2BECB1F-8C8C-41ba-B736-9BE7D946A398</PlatformID>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net35-cf' ">
    <Reference Include="mscorlib, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac" />
    <Reference Include="System, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac" />
    <Reference Include="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=969db8053d3322ac" />
</ItemGroup>

但是,当我尝试编译我的代码时,我收到以下错误消息:

似乎通用编译工作正常,但AssemblyFileVersionAttribute不是紧凑框架的一部分?

更新 1:当 net35-cf TFM 被移除时,项目编译就好了。

提前感谢您的帮助!

【问题讨论】:

  • 好吧,如果你删除它,它会编译吗?
  • 是的,确实如此。将使用此信息更新问题。
  • 那么...这里的问题是什么?只需删除该属性并完成它
  • 问题是:我如何才能使用新的 csproj 格式定位 .NET Compact Framework 3.5,正如问题的标题和第一句所述。如果我删除了net35-cf TFM,那么我就不会针对这个特定的框架。
  • 哦,你误会了,对不起。我的意思是“如果删除AssemblyFileVersionAttribute,它会编译吗?”

标签: c# .net msbuild csproj .net-cf-3.5


【解决方案1】:

您可以通过在.csproj 文件中指定来禁用AssemblyFileVersionAttributeAssemblyVersionAttribute 的生成。

<PropertyGroup "'$(TargetFramework)' == 'net35-cf'">
    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
    <GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
</PropertyGroup>

参考:Equivalent to AssemblyInfo in dotnet core/csproj

【讨论】:

  • 非常感谢您的帮助 - 申请 &lt;GenerateAssemblyFileVersionAttribute&gt;false&lt;/GenerateAssemblyFileVersionAttribute&gt; 对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
相关资源
最近更新 更多