asp.net 核心 xproj 文件具有 Ubuntu 上不存在的导入

asp.net core xproj file has import that doesn't exist on Ubuntu

我使用 Visual Studio 和 .NET 核心工具创建了一个 ASP.NET 核心应用程序。它 运行 在 Windows 上很好,但是当我将它复制到 Ubuntu 进行部署然后 运行 它时,我得到:

....xproj(7,3): error MSB4019: The imported project "/usr/share/dotnet/sdk/1.0.0-preview4-004233/Microsoft/VisualStudio/v14.0/DotNet/Microsoft.DotNet.Props" was not found.

这是有道理的,因为 Visual Studio 没有安装在 Ubuntu 上。为什么它在那里?我尝试从 xproj 中删除导入并导致其他问题:

error MSB4057: The target "Build" does not exist in the project.

这是 xproj

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
  <PropertyGroup Label="Globals">
    <ProjectGuid>ca453b3a-1bb5-4ed8-bbe5-fe1e627a9f76</ProjectGuid>
    <RootNamespace>abc</RootNamespace>
    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
  </PropertyGroup>
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet.Web\Microsoft.DotNet.Web.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

我是 ASP.NET 核心的新手,目前迷失在版本、工具、预览的海洋中...我认为 VS 工具的目标是 1.0.0,但是当我在 linux 我得到的是1.1.0,所以我也安装了1.0.0并使用

dotnet run --framework 1.0.0

我应该如何在 VS (2015) 中创建 Web 项目并将其部署到 linux?

UPDATE 通过进一步谷歌搜索我发现 (https://github.com/aspnet/EntityFramework/issues/5420) 我应该安装“.NET Core Tooling Preview 1 for Visual Studio 2015”,但是我不能这样做,因为我在 linux,所以我该怎么办?

是否无法在 VS 中开发 Web 应用程序并部署到 linux?

更新 2 好吧,尽管我读到的所有内容都说你 运行 是一个带有 dotnet 运行 的网络应用程序,但我发现 here 我应该使用 dotnet myDLL.dll(这很有效, Windows 至少我还没试过 Linux)

那是什么原因呢?核心版本?

dotnet 运行 比知道正确的 DLL 名称要好得多,所以我猜 dotnet 运行 适用于 v1.1?我是否以某种方式为 v1.0 构建了我的项目?

我对所有的版本控制和预览等等一头雾水,希望得到解释。我以为我下载的是最新的东西,我以为 VS 工具包与版本无关?

我对您 Linux 机器上的 .xproj 文件有点困惑。如果您在本地发布 Web 应用程序,则不应在发布的文件之间看到 .xproj 文件。因为 .xproj 只是 Visual Studio 需要的一个文件。 Dotnet 核心只需要一个 project.json 文件和一个 void static main 函数。

1) 尝试此 link https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction

中的指南

2) 或者遵循 Scott Hanselman 的 post 中的指南:http://www.hanselman.com/blog/PublishingAnASPNETCoreWebsiteToACheapLinuxVMHost.aspx

我发现正确的方法(对于 SDK 1.0.0)是

  1. 从 VS 发布
  2. 将发布输出文件夹的内容复制到Linux
  3. 运行 它与 dotnet myapp.dll (而不是 dotnet 运行)。