【问题标题】:How can I cross-compile a C# project for Windows on Linux?如何在 Linux 上为 Windows 交叉编译 C# 项目?
【发布时间】:2018-02-02 12:39:53
【问题描述】:

是否可以使用monomsbuild(或其他我不知道的解决方案)在 Linux 上将 C# 代码编译成二进制 for Windows ?

这些 C# 项目通常包含以下文件:

  • .cs
  • .csproj
  • .config
  • .manifest

应用配置示例:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
      <supportedRuntime version="v4.0.30319" sku=".NETFramework,Version=v4.0" />
      <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

例如.csproj (sn-p):

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
    <TargetZone>Internet</TargetZone>
</PropertyGroup>
<ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Deployment" />
    <Reference Include="System.Web" />
</ItemGroup>
<ItemGroup>
    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
        <Visible>False</Visible>
        <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
        <Install>false</Install>
    </BootstrapperPackage>
    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
        <Visible>False</Visible>
        <ProductName>.NET Framework 3.5 SP1</ProductName>
        <Install>false</Install>
    </BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

免责声明:我真的不太了解 Windows。如果这是 Simply Not Possible™,我可以使用 Windows VM 作为最后的手段。

【问题讨论】:

  • 这是你的答案,我想:stackoverflow.com/questions/6812304/…
  • .net core 也可能是一个选项,请参见此处:docs.microsoft.com/en-us/dotnet/core/…
  • 仅供参考 - 针对 .NET Core(用于可执行文件)或 .NET Standard(用于不可执行的类库)是最现代的方法,具体取决于它是什么类型的项目(您没有提到)。 Build a C# Hello World application with .NET Core in Visual Studio 2017.
  • @Redsandro - 告诉我的是它是 .NET Framework 而不是 .NET Standard/.NET Core。我们需要查看.csproj 文件的内容才能做出决定。
  • Mono 不是 .NET 框架。因此,如果您打算在 Windows 上使用 Mono 运行您的应用程序,它应该会自动运行。如果在 .NET Framework 上运行它可能会出现问题。在这种情况下,请简单地使用 .NET Core,您可以在 Linux 上将您的应用程序发布为 Windows 二进制文件(是的,它支持交叉编译)。

标签: c# linux msbuild mono cross-compiling


【解决方案1】:

在 linux 上,您应该能够仅使用 mono 命令运行您的程序集。 单声道应用程序.exe。无需交叉编译。 (啊,点击一次就可以在任何地方运行的好处)

但是,如果您的意思是 AOT 编译或 mkbundle,那么使用 linux 机器会更容易。

除非您在 Windows 操作系统中有依赖项,否则需要在其中找到替代方案或包含配置文件。

【讨论】:

    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多