Không thể tìm thấy mục tiêu thời gian chạy cho khung .NETCoreApp = v1 tương thích với một trong các thời gian chạy đích


149

Tôi đang cố gắng chuyển một dự án Asp.Net Core RC1 sang RC2 và đã làm theo tài liệu này và cũng đã làm theo các hướng dẫn để di chuyển DNX sang .NET CLI.

Tôi gặp lỗi sau khi thử dotnet run:

Không thể tìm thấy mục tiêu thời gian chạy cho khung '.NETCoreAPP, Version = v1.0' tương thích với một trong các thời gian chạy đích: 'win10-x64, win81-x64, win8-x64, win7-x64'. Nguyên nhân có thể:

  1. Dự án chưa được khôi phục hoặc khôi phục thất bại - 'khôi phục dotnet' không thành công
  2. Dự án không liệt kê một trong số 'win10-x64, win81-x64, win7-x64' trong 'thời gian chạy'

Tôi đã chạy dotnet restorevà dường như đã hoàn thành thành công.

Tôi đã cập nhật tất cả các gói có liên quan đến RC2.

Câu trả lời:


290

Tôi nên làm chính xác những gì thông báo lỗi nói. Khi di chuyển từ RC1, tôi đã không nhận ra rằng tôi phải chỉ định một runtimesphần trong project.jsontệp của mình .

Trong tôi project.jsonđã thêm phần sau:

"runtimes": {
    "win10-x64": { }
  }

Và tôi đã tốt để đi.


Cập nhật ngày 27 tháng 2 năm 2017

Các mẫu dự án mới trong Visual Studio 2017 RC không còn yêu cầu thời gian chạy phải được chỉ định (trong project.jsonhoặc .csproj) trước nếu bạn chọn triển khai ứng dụng của mình dưới dạng Framework Dependent Deployment(FDD).

Tuy nhiên, nếu bạn chọn triển khai ứng dụng của mình bằng Self-contained Deployment(SCD), thì bạn sẽ cần chỉ định tất cả thời gian chạy mà bạn muốn ứng dụng của mình chạy trước trong .csprojtệp của mình .

Dưới đây là ví dụ về .csprojtệp cho ứng dụng sử dụng phương thức triển khai SCD:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.0</TargetFramework>
    <VersionPrefix>1.0.0</VersionPrefix>
    <DebugType>Portable</DebugType>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
  </ItemGroup>
</Project>

Vui lòng xem liên kết này để biết thêm thông tin, bao gồm mô tả kỹ lưỡng về cả hai loại tùy chọn triển khai, cũng như lợi ích và nhược điểm của chúng.


42
Tôi đã tạo một dự án mới trong Bản cập nhật VS 2015 3. Và vẫn còn thiếu phần này.
Edward Olamisan

7
Tôi nghĩ không phải lúc nào cũng cần thiết để thêm cài đặt này. Tài liệu nói: "Nếu bạn là một thư viện lớp di động có thể chạy trên mọi thời gian chạy, bạn không cần chỉ định thời gian chạy." - Điều đó đúng với hầu hết các dự án của tôi, nhưng lỗi này xuất hiện khi tôi thêm dự án Entity Framework Core vào giải pháp của mình. Tôi nghĩ rằng EF Core - ít nhất là ở trạng thái RC2 - có giới hạn về nền tảng mà nó có thể chạy trên đó, do đó, các dự án tham chiếu đến nó, có thể cần phải tuân thủ các cài đặt đó. Nhưng tôi chỉ đoán thôi. Tài liệu thực sự khó hiểu vào thời điểm này.
Bernhard Koenig

7
Thậm chí không cần điều này trên mẫu 1.0 Core VS2015 mới, được cập nhật lên 1.0.1 và gặp lỗi ở trên, để sửa lỗi!
Steve McNiven-Scott

1
@ SteveMcNiven-Scott - Tương tự ở đây. Tôi cũng đã phải thêm một dòng khác trong "thời gian chạy" để có được nó để khôi phục và xây dựng trên Ubuntu Server: "ub Ubuntu.16.04-x64". YMMV nhưng lỗi sẽ chỉ ra nền tảng bạn đang thiếu và sẽ cần thêm.
Sa hoàng Bomba

5
Thông báo lỗi không đề cập đến "project.json". Làm thế nào mọi người có nghĩa vụ phải đoán ??
hữu íchBee 10/11/2016

76

Tôi đã nhận được lỗi này sau khi cập nhật mẫu lõi VS2015 lên 1.0.1. Đó là bởi vì tôi có PCL nhắm mục tiêu netstandard 1.4 nếu bạn không muốn chỉ định từng thời gian chạy, Chỉ cần thay đổi đánh dấu phụ thuộc cho Microsoft.NETCore.Appđiều này:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}

1
Đánh dấu ở trên đã sửa lỗi biên dịch của tôi, nhưng IIS Express sẽ không bắt đầu sau đó. Thay đổi "phiên bản": "1.0.1" thành "phiên bản": "1.0.0" đã giải quyết vấn đề IIS.
Ross

@Ross cập nhật phần công cụ trong project.json để khớp với phiên bản NETCore.App
DalSoft

Trong trường hợp này, "công cụ": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-Final"},
DalSoft

1
@DalSoft - Có, tôi đã cập nhật VS 2015 của mình vài tuần trước với các bản vá mới nhất bao gồm IISIntegration.Tools và nó đã giải quyết vấn đề Microsoft.NETCore.App: 1.0.1 cho tôi.
Ross

1
@usiouslyBee Thư viện lớp di động
Mike_G

35

trong project.json tôi đã thay đổi điều này (loại đã thêm):

//"Microsoft.NETCore.App": "1.1.0",
"Microsoft.NETCore.App": { "version": "1.1.0", "type": "platform" },

Bây giờ tôi có thể xây dựng lại :-)

cập nhật: bây giờ tôi có thể xây dựng lại nhưng không "chạy" trang web.

Bạn cần chắc chắn rằng bạn có thời gian chạy và sdk cũng:

*) Các công cụ Visual Studio bao gồm .NET Core 1.0.1. Để thêm hỗ trợ .NET Core 1.1, bạn cũng cần cài đặt thời gian chạy .NET Core 1.1.

https://www.microsoft.com/net/doad/core#/c Hiện


1
Có vẻ như bạn không thể chạy trang web vì bạn cần cài đặt .NET Core 1.1 SDK
Victor Sharovatov

và đôi khi cài đặt lại Runtime cũng cần thiết tôi đã tìm ra.
juFo

Điều này đã giúp tôi. Cảm ơn! Nhận xét "Microsoft.NETCore.App" trực tiếp từ các phụ thuộc trong project.json và thay đổi nó thành "khung": {"netcorzon1.1": {"phụ thuộc": {"Microsoft.NETCore.App": {" phiên bản ":" 1.1.0 "," loại ":" nền tảng "}}}},
neodymium

1
Cảm ơn bạn. 2 bước đơn giản này đã giải quyết vấn đề. Hy vọng rằng MS sẽ làm cho nó trở nên thân thiện hơn với nhà phát triển trong tương lai gần.
EvZ

20

Tôi đã nhận được lỗi này vì tôi đã sử dụng Trình quản lý gói NuGet bị hỏng vô cùng trong Visual Studio 2015 để cập nhật các phụ thuộc project.json của mình. Nó biến điều này:

"frameworks": {
  "netcoreapp1.0": {
    "dependencies": {
      "Microsoft.NETCore.App": {
        "type": "platform",
        "version": "1.0.1"
      } 
    }
  }
}

vào đây:

"dependencies": {
  "Microsoft.NETCore.App": "1.1.0"
},
"frameworks": {
  "netcoreapp1.0": {}
}

Tạm biệt, định nghĩa nền tảng!


15

Nếu bạn đọc hai liên kết này:

Đầu tiên, https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/USE-with-xplat-cli

thứ hai, https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog

Bạn sẽ thấy rằng bạn có thể xây dựng một phiên bản di động hoàn toàn bằng cách sử dụng đoạn mã sau trong phần tử gốc phụ thuộc trong project.json. Không cần chỉ định thời gian chạy vì đây là thời gian chạy mức CORE nên không liên quan đến nền tảng, hay còn gọi là "Khung phụ thuộc"

"Microsoft.NETCore.App": {
    "type": "platform",
    "version": "1.0.1"
}

hoặc bạn có thể xây dựng cho nhiều nền tảng được nhắm mục tiêu ("ứng dụng độc lập") bằng cách xóa phần tử type: platform như thế này:

Thêm phần này vào phần tử gốc phụ thuộc trong project.json

"Microsoft.NETCore.App": {
    "version": "1.0.1"
}

và thêm phần này dưới dạng phần tử cấp gốc mới

"runtimes": {
    "win10-x64": {},  /* one or more RIDs */
    "osx.10.10-x64": {}
  },

Nhiều mục tiêu yêu cầu bạn cung cấp tên nền tảng được gọi là ".NET Core Runtime IDentifier (RID)" Danh sách này có thể được tìm thấy tại liên kết thứ hai ở trên. Nó bao gồm nhiều hương vị của Windows, Linux và OS X.

Để biết tổng quan tốt về các lựa chọn triển khai khác nhau, bạn cũng có thể đọc trang này:

https://docs.microsoft.com/en-us/dotnet/articles/core/deploying/index

Từ liên kết trên:

Bạn có thể tạo hai loại triển khai cho các ứng dụng .NET Core:

Triển khai phụ thuộc khung

Như tên của nó, việc triển khai phụ thuộc vào khung (FDD) dựa trên phiên bản .NET Core trên toàn hệ thống được chia sẻ để có mặt trên hệ thống đích. Vì .NET Core đã có sẵn, ứng dụng của bạn cũng có thể di động giữa các lần cài đặt .NET Core. Ứng dụng của bạn chỉ chứa mã riêng và mọi phụ thuộc của bên thứ ba nằm ngoài thư viện .NET Core. FDD chứa các tập tin có thể được khởi chạy bằng cách sử dụng tiện ích dotnet từ dòng lệnh. Ví dụ: dotnet app.dll chạy một ứng dụng có tên là ứng dụng.

Triển khai khép kín

Không giống như FDD, việc triển khai độc lập (SCD) không dựa vào bất kỳ thành phần dùng chung nào có mặt trên hệ thống đích. Tất cả các thành phần, bao gồm cả thư viện .NET Core và thời gian chạy .NET Core, được bao gồm trong ứng dụng và được cách ly với các ứng dụng .NET Core khác. SCD bao gồm một tệp thực thi (chẳng hạn như app.exe trên nền tảng Windows cho một ứng dụng có tên là ứng dụng), đây là phiên bản được đổi tên của máy chủ .NET Core dành riêng cho nền tảng và tệp dll (như app.dll), đó là ứng dụng thực tế.


9

Trong trường hợp của tôi, tôi vừa cập nhật tất cả các gói nuget lên các phiên bản mới nhất của chúng và nuget đã thay đổi tham chiếu gói 'Microsoft.NETCore.App' của tôi thành như sau:

"Microsoft.NETCore.App": "1.1.0"

Tôi đã thay đổi nó trở lại dạng sau và mọi thứ đều hoạt động tốt:

"Microsoft.NETCore.App": {
      "version": "1.1.0",
      "type": "platform"
    }

Tạm biệt 3 giờ của cuộc đời tôi ....


4

Nếu bạn thực hiện một dotnet mới và nhìn vào json dự án đầu ra, bạn sẽ thấy các biệt danh đã thay đổi.

Thực hiện các thay đổi cho project.json của bạn như sau:

"dependencies": {},
   "frameworks": {
     "netcoreapp1.0": {
        "dependencies": {
         "Microsoft.NETCore.App": {
         "type": "platform",
         "version": "1.0.1"
         }
    },
      "imports": "dnxcore50"
    }
  }

Đối với tôi đây là giải pháp tốt nhất. .NET Core đang trong tình trạng thay đổi liên tục và mọi thứ cứ thay đổi. Sử dụng CLI để tạo cho bạn một project.json để sửa các thay đổi trong project.json của bạn mà NuGet PM dường như không thể giữ nhất quán và cập nhật.
James B

0

Tôi tìm thấy một liên kết hữu ích từ nhận xét của svick dưới trang sau: https://github.com/dotnet/cli/issues/2442


1
Mặc dù câu trả lời của bạn là chính xác 100%, nhưng nó cũng có thể trở nên vô dụng 100% nếu liên kết đó bị di chuyển, thay đổi, sáp nhập vào một trang khác hoặc trang web chính biến mất ... :-( Do đó, vui lòng chỉnh sửa câu trả lời của bạn và sao chép liên quan các bước từ liên kết đến câu trả lời của bạn, qua đó đảm bảo câu trả lời của bạn trong 100% thời gian tồn tại của trang web này! ;-) Bạn luôn có thể để lại liên kết ở cuối câu trả lời của mình làm nguồn cho tài liệu của bạn ...
Donald Duck

0

Tôi thấy bạn cần những điều sau đây trong project.json. Đây là những gì được yêu cầu để sửa lỗi của tôi:

Phụ thuộc

"dependencies": {
   "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
   },
}

Khung

"frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

Thời gian chạy

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

Bạn có thể muốn thêm thời gian chạy nếu bạn có kế hoạch xuất bản lên IIS. Xin vui lòng xem một cái gì đó như sau:

 "runtimes": {
    "win10-x64": {}
  },

Đây là một mẹo chung đã làm việc tốt cho tôi. Khi công cụ của tôi bị hỏng, đôi khi tôi tạo một ứng dụng ASP.NET Core mặc định là trang web hoặc api web trống để xem xét các phụ thuộc trong project.json và các nơi khác. Bạn có thể thường xuyên bắt được rất nhiều thứ theo cách đó. Các câu trả lời ở trên là tại chỗ, nhưng tôi nghĩ rằng tôi sẽ viết nó ở đây trong trường hợp ai đó muốn tách logic ra nhiều hơn trong định dạng mẫu chung mà ASP.NET Core sử dụng.


0

Trong Windows 7 với VS 2015, soluiton sau khi cập nhật lên netcore 1.1.2 đã thay đổi tệp project.json như sau:

{
"version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": "1.1.2"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"    //This line must disappear
    }
  },

  "runtimes": {                 //
    "win7-x64": {}              //Add this lines
  }                             //
}

Sau khi thay đổi điều này, các phụ thuộc sẽ cập nhật và viola.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.