c# – .NET Core MSBuild:如何将csproj与多个project.json文件关联起来?

编辑3:看起来我正在尝试做的事情不受支持;实际上不可能跨配置“共享”project.json文件.我用How to point to a different project.json location in a .NET Core PCL?取代了这个问题

编辑2:是的,我的怀疑是正确的. ProjectJson和ProjectLockJson实际上并不是特殊的MSBuild属性,它们的值正在另一个导入的MSBuild项目中用于执行实际工作.当我有更新时,我会在此上发布更多内容(希望以答案的形式).

编辑:我已经发布了整个项目to GitHub,所以你们可以得到一个repro.只需git克隆存储库,在VS中打开它,开始构建,你应该点击错误.

原帖

我正在尝试创建一个基于.NET Core的可移植类库.我无法将多个project.json文件与我的csproj相关联.这是我的目录结构:

LibFoo
|
---- LibFoo.csproj
|
---- project.json
|
---- Platforms
     |
     ---- Net45
     |    |
     |    ---- project.json
     |
     ---- Profile32
          |
          ---- project.json

我有两个MSBuild平台(不包括AnyCPU),Net45和Profile32.基本上,当它设置为.NET Framework 4.5时,我希望它编译包括根目录中的project.json和Platforms / Net45中的project.json.当它设置为Profile32时,我希望它与Platforms / Profile32中的project.json一起使用.

我的问题是,我怎样才能在MSBuild中使用它?这是我的csproj文件的相关片段:

<ItemGroup Condition=" '$(Platform)' == 'Net45' ">
  <!-- Target WPF apps -->
  <TargetPlatform Include=".NETFramework, Version=4.5" />
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'Profile32' ">
  <!-- Target Windows 8.1 Universal apps -->
  <TargetPlatform Include="Windows, Version=8.1" />
  <TargetPlatform Include="WindowsPhoneApp, Version=8.1" />
</ItemGroup>
<ItemGroup>
  <None Include="Platforms\Net45\project.json" />
  <None Include="Platforms\Profile32\project.json" />
</ItemGroup>
<PropertyGroup>
  <ProjectJsonRoot>Platforms\$(Platform)</ProjectJsonRoot>
  <ProjectJson>$(ProjectJsonRoot)\project.json</ProjectJson>
  <ProjectLockJson>$(ProjectJsonRoot)\project.lock.json</ProjectLockJson>
</PropertyGroup>
<ItemGroup>
  <!-- Include a common project.json for shared configs -->
  <None Include="project.json" />
</ItemGroup>

出于某种原因,ProjectJson和ProjectLockJson部分似乎不起作用.我怀疑它们是问题,因为我在MSBuild找不到任何官方文档,但CoreFX似乎在他们的csproj文件中使用它非常成功.难道我做错了什么?

解决方法:

问题是你应该从.csprojs转移到.xprojs.然后每个.xproj都可以有单个project.json,可以定位多个框架.

好文章:http://blog.marcgravell.com/2015/11/the-road-to-dnx-part-1.html

这是我的样本:https://github.com/adamsitnik/BenchmarkDotNet

上一篇:c# – 32位和64位ASP.NET部署


下一篇:c# – 使用命令行构建office addin时出错