【发布时间】:2018-02-02 12:39:53
【问题描述】:
是否可以使用mono 或msbuild(或其他我不知道的解决方案)在 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