我该如何在Linux上将C#项目交叉编译为Windows?

4

是否可能在Linux上使用monomsbuild(或其他我不知道的解决方案)将C#代码编译成适用于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(片段):

<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了解不多。如果这是根本不可能™,我可以使用Windows虚拟机作为最后的手段。


1
这是你的答案,我认为: https://dev59.com/YVnUa4cB1Zd3GeqPbpFD - Lukas Hieronimus Adler
2
.NET Core也可能是一个选择,请参见此处:https://learn.microsoft.com/zh-cn/dotnet/core/linux-prerequisites?tabs=netcore2x - Lord Darth Vader
1
FYI - 根据项目类型(您尚未提及),针对可执行文件应使用.NET Core,而针对非可执行类库应使用.NET Standard,这是最现代的方法。在Visual Studio 2017中使用.NET Core构建C# Hello World应用程序 - NightOwl888
2
@Redsandro - 这只告诉我它是.NET Framework而不是.NET Standard/.NET Core。我们需要查看.csproj文件的内容来做出判断。 - NightOwl888
1
Mono不是.NET Framework。因此,如果您打算在Windows上使用Mono运行应用程序,它应该可以自动工作。如果您在.NET Framework上运行它,则可能会出现问题。在这种情况下,请使用.NET Core,您可以将应用程序发布为Linux上的Windows二进制文件(是的,它支持交叉编译)。 - Lex Li
显示剩余3条评论
1个回答

0

在Linux上,您应该能够使用mono命令直接运行汇编程序。 mono app.exe。无需交叉编译。(啊,一次点击到处运行的好处)

但是,如果您指的是AOT编译或mkbundle,则最好使用Linux机器。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接