【问题标题】:How to run Microsoft QDK from source如何从源代码运行 Microsoft QDK
【发布时间】:2020-09-01 16:52:14
【问题描述】:

在 C# 宿主项目中构建和包含 QDK 源代码的一般过程是什么?

Develop with Q# and .NET 之后,我建立了一个 C# 宿主项目,它在 linux 上引用了一个 Q# 库。使用预构建的 QDK 并在 Q# 库 .csproj 文件的顶部包含 <Project Sdk="Microsoft.Quantum.Sdk/0.12.20072031"> 时,一切正常。

但是,我需要修改qsharp-runtime 中的代码,所以我想从源代码而不是SDK 编译。我可以成功构建源代码,但不确定如何使其对 C# 项目“可用”。按照related question 中的建议,我在 Q# .csproj 文件中包含了对所有具有 qsharp-runtime 的项目的项目引用和对 qsharp-compilers 的包引用:

<Project Sdk="Microsoft.NET.Sdk">

  <!--Reference to Q# Runtime Projects -->
  <ItemGroup>
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\Common\Microsoft.Quantum.Simulation.Common.csproj" />
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\Core\Microsoft.Quantum.Runtime.Core.csproj" />
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\CsharpGeneration\Microsoft.Quantum.CsharpGeneration.fsproj" />
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\EntryPointDriver\Microsoft.Quantum.EntryPointDriver.csproj" />
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\QCTraceSimulator\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.csproj" />
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\QsharpCore\Microsoft.Quantum.QSharp.Core.csproj" />
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\RoslynWrapper\Microsoft.Quantum.RoslynWrapper.fsproj" />
    <ProjectReference Include="..\..\..\qdk\qsharp-runtime\src\Simulation\Simulators\Microsoft.Quantum.Simulators.csproj" />
  </ItemGroup>

  <!--Reference to Q# compiler package -->
  <ItemGroup>
    <PackageReference Include="Microsoft.Quantum.Compiler" Version="0.12.20072031" />
    <PackageReference Include="Microsoft.Quantum.Standard" Version="0.12.20072031" />
  </ItemGroup>

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
  </PropertyGroup>

</Project>

但是,这会导致 C# 主机不再识别 Q# 命名空间。如果 Q# 直接移动到 Library.qs 中的 C# 项目中,并使用 &lt;Compile Include="Library.qs"/&gt; 引用,则无法再编译。似乎缺少一些我没有从包引用中得到的部分。如果我同时包含包引用和 QDK,则冲突会导致构建失败。

【问题讨论】:

    标签: q#


    【解决方案1】:

    看看我们最近添加到 repo 中的 AdvntageBenchmark 项目: https://github.com/microsoft/qsharp-runtime/tree/master/AdvantageBenchmark/privateBuild

    总的来说,我会:

    1. 继续使用 Quantum.Sdk 编译 Q# 项目
    2. 导入Simulators.Dev.props,以便它自动添加所有项目引用和所需的道具

    这是项目的样子:

    <Project Sdk="Microsoft.Quantum.Sdk/0.12.20082705-beta">
      <!-- Add project references to Simulator and other required packages: -->
      <Import Project="..\..\src\Simulation\Common\Simulators.Dev.props" />
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <IncludeQsharpCorePackages>false</IncludeQsharpCorePackages> <!-- otherwise the standard library is included by the Sdk -->
      </PropertyGroup>
    
    </Project>
    

    【讨论】:

    • 感谢您的快速回复。我能够运行不包含&lt;IncludeQsharpCorePackages&gt;false&lt;/IncludeQsharpCorePackages&gt; 的releaseBuild(在更改项目文件中的小写q 和p 之后)。但是当我运行 privateBuild 时,它会产生错误,例如“Quantum.qs(555,44): error CS0115: 'Advantage56.Body': 找不到合适的方法来覆盖”。使用这种方法时,我在自己的项目中遇到了相同的错误
    • 另外,这似乎允许修改模拟器代码?是否也可以使用这种方式来修改Driver(如Driver.cs)代码?
    猜你喜欢
    • 2019-07-02
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2021-01-17
    • 2019-03-21
    相关资源
    最近更新 更多