Làm cách nào tôi có thể chẩn đoán các phụ thuộc bị thiếu (hoặc các lỗi của trình tải khác) trong dnx?


133

Tôi đang cố gắng chạy phiên bản sửa đổi của mẫu HelloWeb cho ASP.NET vNext trên DNX bằng Kestrel. Tôi hiểu rằng điều này rất có lợi, nhưng tôi hy vọng rằng nhóm ASP.NET ít nhất sẽ giữ cho ứng dụng web đơn giản nhất có thể hoạt động :)

Môi trường:

  • Linux (Ubuntu, khá nhiều)
  • Mono 3.12.1
  • DNX 1.0.0-beta4-11257 (Tôi cũng có sẵn 11249)

Mã "ứng dụng web", trong Startup.cs:

using Microsoft.AspNet.Builder;
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseWelcomePage();
    }
}

Cấu hình dự án, trong project.json:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta4",
    "Microsoft.Framework.Runtime": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Common": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Loader": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

kpm restore xuất hiện để làm việc tốt

Tuy nhiên, khi tôi cố chạy, tôi nhận được một ngoại lệ cho thấy Microsoft.Framework.Runtime.IApplicationEnvironmentkhông thể tìm thấy. Dòng lệnh và lỗi (hơi được định dạng lại)

.../HelloWeb$ dnx . kestrel
System.IO.FileNotFoundException: Could not load file or assembly 
'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
or one of its dependencies.
File name: 'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
    (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke 
    (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder,
     System.Object[] parameters, System.Globalization.CultureInfo culture)
    [0x00000] in <filename unknown>:0

Mặc dù rõ ràng, nhu cầu cấp thiết nhất của tôi là khắc phục điều này, tôi cũng đánh giá cao lời khuyên về cách di chuyển để chẩn đoán sự cố xảy ra để tôi có thể tự khắc phục các sự cố tương tự trong tương lai. (Điều đó cũng có khả năng làm cho câu hỏi này hữu ích hơn cho những người khác nữa.)

Tôi đã tìm thấy Microsoft.Framework.Runtime.IApplicationEnvironmenttrong Microsoft.Framework.Runtime.Interfacesnguồn lắp ráp và dường như điều đó đã không thay đổi gần đây. Không rõ lý do tại sao ngoại lệ hiển thị tên như thể toàn bộ bản thân nó, thay vì chỉ là một giao diện trong một bản lắp ráp khác. Tôi đoán điều này có thể là do lắp ráp các giao diện trung tính , nhưng không rõ lỗi. ( [AssemblyNeutral]đã chết, nên không phải vậy ... )


Vì tò mò, bạn có ý định liên kết đến github.com/aspnet/Home/wiki/Assugging-Neutral-Interfaces cho liên kết giao diện trung lập lắp ráp của bạn hoặc ở một nơi nào khác? Vì nó hiện đang bị hỏng
cgijbels

@cgijbels: Cảm ơn - Tôi thực sự có ý định liên kết đến davidfowl.com/assinstall-neutral-interfaces nhưng liên kết của bạn có lẽ tốt hơn ...
Jon Skeet

Giao diện trung lập lắp ráp @JonSkeet đã biến mất.
tugberk

@tugberk: Trời ạ? Điều đó thật thú vị - bạn có một liên kết tôi có thể đưa vào một bản chỉnh sửa không?
Jon Skeet

@JonSkeet github.com/aspnet/Configuration/commit/ khuyên có thể? :)
tugberk

Câu trả lời:


144

Câu hỏi hay. Đối với vấn đề cụ thể của bạn, có vẻ như bạn có một sự không phù hợp trong các phụ thuộc được giải quyết của bạn. Khi điều này xảy ra, có thể là do bạn đang chạy ứng dụng của mình trên một dnx không tương thích. Chúng tôi vẫn đang thực hiện các thay đổi lớn, vì vậy nếu bạn thấy thiếu phương thức, có thể bạn đã kết thúc việc chạy betaXcác gói vàbetaY dnx hoặc ngược lại.

Cụ thể hơn, Giao diện trung lập hội đã bị xóa trong beta4 nhưng có vẻ như ứng dụng bạn đang chạy vẫn đang sử dụng chúng.

Chúng tôi có kế hoạch để làm cho nó để các gói có thể đánh dấu dnx tối thiểu mà chúng yêu cầu chạy để làm cho thông báo lỗi rõ ràng hơn. Cũng như thời gian trôi qua, những thay đổi phá vỡ sẽ chết dần.

Nói chung, tôi cảm thấy như đã đến lúc tôi viết một hướng dẫn về cách chẩn đoán các vấn đề như thế này khi sử dụng dnx (vì nó khá khác với .NET hiện tại).

Phụ thuộc bạn đưa vào project.jsonchỉ là cấp cao nhất. Các phiên bản cũng luôn ở mức tối thiểu (giống như gói NuGet). Điều này có nghĩa là khi bạn chỉ định Foo 1.0.0-beta4bạn thực sự chỉ định Foo >= 1.0.0-beta4. Điều này có nghĩa là nếu bạn yêu cầu MVC 0.0.1và các phiên bản tối thiểu trên nguồn cấp dữ liệu được định cấu hình của bạn là MVC 3.0.0, bạn sẽ nhận được phiên bản đó. Chúng tôi cũng KHÔNG BAO GIỜ thả nổi phiên bản của bạn trừ khi bạn chỉ định nó. Nếu bạn yêu cầu 1.0.0 và nó tồn tại, bạn sẽ nhận được 1.0.0 ngay cả khi các phiên bản mới hơn tồn tại. Chỉ định các phiên bản trống là LUÔN LUÔN xấu và sẽ không được phép trong các bản dựng sau.

Có một tính năng mới mà chúng tôi đang giới thiệu cho nuget được gọi là phiên bản nổi. Ngày nay, nó chỉ hoạt động trên thẻ phát hành trước, nhưng trong phiên bản tiếp theo, nó sẽ hoạt động trên nhiều phần của phiên bản. Điều này tương tự như cú pháp npm và gem để chỉ định phạm vi phiên bản trong tệp đặc tả gói.

1.0.0-*- Có nghĩa là cung cấp cho tôi phiên bản CAO NHẤT khớp với tiền tố (theo quy tắc phiên bản ngữ nghĩa ) HOẶC nếu không có phiên bản phù hợp với tiền tố đó, hãy sử dụng hành vi bình thường và đưa cho tôi phiên bản thấp nhất> = phiên bản đã chỉ định.

Khi bạn chạy khôi phục trong các bản dựng mới nhất, nó sẽ ghi ra một tệp có tên project.lock.json. Tập tin này sẽ có sự đóng cửa quá mức của các phụ thuộc cho tất cả các khung mục tiêu được xác định trong project.json.

Khi một cái gì đó như thế này thất bại, bạn có thể làm như sau:

Hãy xem các phụ thuộc được giải quyết bằng cách sử dụng kpm list . Điều này sẽ cho bạn thấy các phiên bản đã giải quyết của các gói được tham chiếu bởi dự án của bạn và phụ thuộc nào đã kéo nó vào. Ví dụ: nếu A -> B, nó sẽ hiển thị:

Một
  -> B
B
 ->

Đầu ra danh sách KPM thực tế:

Liệt kê các phụ thuộc cho ClassL Library39 (C: \ Users \ davifowl \ Documents \ Visual Studio 14 \ Project \ ClassL Library39 \ src \ ClassL Library39 \ project.json)

[Target framework DNX,Version=v4.5.1 (dnx451)]

 framework/Microsoft.CSharp 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/mscorlib 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System.Core 4.0.0.0
    -> ClassLibrary39 1.0.0
*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0

[Target framework DNXCore,Version=v5.0 (dnxcore50)]

*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0
 System.Runtime 4.0.20-beta-22709
    -> ClassLibrary39 1.0.0

* có nghĩa là phụ thuộc trực tiếp.

Nếu bạn có một phòng thu trực quan hoạt động (phá vỡ với DNX ngay bây giờ), bạn có thể xem nút tham chiếu. Nó có cùng dữ liệu được biểu thị trực quan:

Nút tham chiếu

Hãy xem xét một sự thất bại phụ thuộc trông như thế nào:

Đây là project.json

{
    "version": "1.0.0-*",
    "dependencies": {
        "Newtonsoft.Json": "8.0.0"
    },

    "frameworks" : {
        "dnx451" : { 
            "dependencies": {
            }
        },
        "dnxcore50" : { 
            "dependencies": {
                "System.Runtime": "4.0.20-beta-22709"
            }
        }
    }
}

Newtonsoft.Json 8.0.0không tồn tại. Vì vậy, chạy khôi phục kpm hiển thị như sau:

nhập mô tả hình ảnh ở đây

Khi chẩn đoán khi khôi phục có thể thất bại, hãy xem các yêu cầu HTTP được thực hiện, chúng cho bạn biết nguồn gói được cấu hình mà kpm đã xem. Lưu ý trong hình trên, có một CACHEyêu cầu. Đây là bộ nhớ đệm được xây dựng dựa trên loại tài nguyên (nupkg hoặc nuspec) và có một cấu hình TTL (nhìn vào kpm restore --help). Nếu bạn muốn buộc kpmphải nhấn các nguồn NuGet từ xa, hãy sử dụng --no-cachecờ:

Khôi phục KPM - không có bộ đệm

Những lỗi này cũng xuất hiện trong Visual Studio trong cửa sổ đầu ra nhật ký trình quản lý gói:

nhập mô tả hình ảnh ở đây

Lưu ý bên!

Nguồn gói

Tôi sẽ mô tả cách NuGet.config hoạt động ngay bây giờ (có thể sẽ thay đổi trong tương lai). Theo mặc định, bạn có NuGet.config với nguồn NuGet.org mặc định được định cấu hình trên toàn cầu trong%appdata%\NuGet\NuGet.Config . Bạn có thể quản lý các nguồn toàn cầu này trong phòng thu trực quan hoặc bằng công cụ dòng lệnh NuGet. Bạn phải luôn luôn xem các nguồn hiệu quả của mình (những nguồn được liệt kê trong đầu ra kpm) khi cố gắng chẩn đoán lỗi.

Tìm hiểu thêm về NuGet.config tại đây

Trở lại thực tế:

Khi các phụ thuộc không được giải quyết, việc chạy ứng dụng sẽ cung cấp cho bạn điều này:

> dnx . run
System.InvalidOperationException: Failed to resolve the following dependencies for target framework 'DNX,Version=v4.5.1':
   Newtonsoft.Json 8.0.0

Searched Locations:
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\{name}\project.json
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\test\{name}\project.json
  C:\Users\davifowl\.dnx\packages\{name}\{version}\{name}.nuspec
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\{name}.dll
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_32\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_64\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\{name}\{version}\{name}.dll

Try running 'kpm restore'.

   at Microsoft.Framework.Runtime.DefaultHost.GetEntryPoint(String applicationName)
   at Microsoft.Framework.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
   at Microsoft.Framework.ApplicationHost.Program.Main(String[] args)

Về cơ bản thời gian chạy cố gắng xác nhận rằng toàn bộ biểu đồ phụ thuộc đã được giải quyết trước khi thử chạy. Nếu nó gợi ý chạykpm restore nó bởi vì nó không thể tìm thấy các phụ thuộc được liệt kê.

Một lý do khác khiến bạn có thể gặp lỗi này là nếu bạn đang chạy sai hương vị dnx. Nếu ứng dụng của bạn chỉ chỉ định dnx451 và bạn cố chạy CoreCLR dnx, bạn có thể thấy một vấn đề tương tự. Hãy chú ý đến khung mục tiêu trong thông báo lỗi:

Để chạy:

dnx4x - runs on dnx-clr-{etc}
dnxcore50 - runs on dnx-coreclr-{etc}

Khi bạn đang cố gắng chạy, bạn nên nhớ rằng ánh xạ tinh thần từ clr đến khung mục tiêu được xác định trong của bạn project.json.

Điều này cũng hiển thị trong Visual Studio dưới nút tham chiếu: Phụ thuộc chưa được giải quyết

Các nút được đánh dấu là màu vàng không được giải quyết.

Những điều này cũng hiển thị trong danh sách lỗi:

Danh sách lỗi phụ thuộc chưa được giải quyết

Xây dựng

Những lỗi này cũng hiển thị khi xây dựng. Khi xây dựng từ dòng lệnh, đầu ra rất dài dòng và có thể cực kỳ hữu ích khi chẩn đoán sự cố:

> kpm build

Building ClassLibrary39 for DNX,Version=v4.5.1
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Assembly dependency framework/mscorlib 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll

  Using Assembly dependency framework/System 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll

  Using Assembly dependency framework/System.Core 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll

  Using Assembly dependency framework/Microsoft.CSharp 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll


Building ClassLibrary39 for DNXCore,Version=v5.0
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Package dependency System.Console 4.0.0-beta-22709
    Source: C:\Users\davifowl\.dnx\packages\System.Console\4.0.0-beta-22709
    File: lib\contract\System.Console.dll

  Using Package dependency System.IO 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.IO\4.0.10-beta-22231
    File: lib\contract\System.IO.dll

  Using Package dependency System.Runtime 4.0.20-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Runtime\4.0.20-beta-22231
    File: lib\contract\System.Runtime.dll

  Using Package dependency System.Text.Encoding 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Text.Encoding\4.0.10-beta-22231
    File: lib\contract\System.Text.Encoding.dll

  Using Package dependency System.Threading.Tasks 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Threading.Tasks\4.0.10-beta-22231
    File: lib\contract\System.Threading.Tasks.dll

Đầu ra cho thấy tất cả các tập hợp được chuyển vào trình biên dịch từ các gói và tham chiếu dự án. Khi bạn bắt đầu gặp lỗi xây dựng, thật hữu ích khi xem ở đây để đảm bảo rằng gói bạn đang sử dụng thực sự hoạt động trên nền tảng đích đó.

Đây là một ví dụ về gói không hoạt động trên dnxcore50:

{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.Owin.Host.SystemWeb": "3.0.0"
    },

    "frameworks": {
        "dnx451": {
            "dependencies": {
            }
        },
        "dnxcore50": {
            "dependencies": {
                "System.Console": "4.0.0-beta-22709"
            }
        }
    }
}

Microsoft.Owin.Host.SystemWeb phiên bản 3.0.0 không có bất kỳ hội đồng nào chạy trên dnxcore50 (hãy xem thư mục lib của gói đã giải nén). Khi chúng tôi chạy kpm build:

Thiếu hội đồng trên dnxcore50

Lưu ý rằng nó "sử dụng Gói Microsoft.Owin.Host.SystemWeb" nhưng không có "Tệp:". Đây có thể là lý do cho một thất bại xây dựng.

Ở đây kết thúc não của tôi


Tôi đang cố gắng sử dụng danh sách dnu như bạn đề xuất, để xác định lý do tại sao dnx không thể giải quyết sự phụ thuộc. Nhưng tôi đang nhận được một "Không thể định vị dự án" màu đỏ. Việc lắp ráp nằm trong thư mục tạo tác, được tạo bằng cách chọn "Sản xuất đầu ra khi xây dựng". Bất kỳ đề xuất về cách tiến hành?
Mike Scott

Thư mục tạo tác có liên quan gì? Bạn đã tham khảo sự phụ thuộc trong project.json chưa? Gói đó bạn đang tham khảo có sẵn trên nguồn cấp dữ liệu được định cấu hình không?
davidfowl

17

Tôi vẫn không biết hoàn toàn những gì đã sai, nhưng bây giờ tôi có một loạt các bước để ít nhất làm cho việc thử mọi thứ dễ dàng hơn:

  • Khi nghi ngờ, hãy cài đặt lại dnx
    • Thổi đi bộ đệm gói có thể hữu ích
  • Kiểm tra ~/.config/NuGet.configđể đảm bảo bạn đang sử dụng đúng nguồn cấp NuGet

Tôi đã kết thúc bằng cách sử dụng dòng lệnh sau để kiểm tra các tùy chọn khác nhau theo cách hợp lý sạch sẽ:

rm -rf ~/.dnx/packages && rm -rf ~/.dnx/runtimes && dnvm upgrade && kpm restore && dnx . kestrel

Có vẻ như vấn đề của tôi thực sự là do các phiên bản phụ thuộc sai được cài đặt. Một số phiên bản "1.0.0-beta4"rõ ràng là khá khác nhau "1.0.0-beta4-*". Ví dụ: phần Kestrelphụ thuộc đã cài đặt phiên bản 1.0.0-beta4-11185 khi chỉ được chỉ định là 1.0.0-beta4, nhưng phiên bản 1.0.0-beta4-11262 -*ở cuối. Tôi muốn chỉ định beta4rõ ràng để tránh vô tình sử dụng bản dựng beta3 với

Cấu hình dự án sau hoạt động tốt:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4-*",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4-*",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

6
Điều này là do -*luôn cung cấp cho bạn phiên bản phát hành trước mới nhất, trong khi không có phiên bản thấp nhất, bạn sẽ có được phiên bản thấp nhất đáp ứng tất cả các phụ thuộc (như thường thấy với NuGet). Bài kiểm tra này có một vài ví dụ.
Alexander Köplinger

2
@ AlexanderKöplinger: Cảm ơn, điều đó có ý nghĩa. Vậy ... beta4 là beta4 sớm nhất, trong khi ... beta4- * là beta4 mới nhất, phải không?
Jon Skeet

4
"frameworks": {"dnx451": {}}nó đã được sửa chữa cho tôi, không cần chodnxcore50
cha mẹ của tôi

Lệnh đầu tiên của bạn cũng giúp tôi vượt qua bị kẹt trên phiên bản beta5. Tôi đã thử chạy dnvm upgrade-self, điều này sẽ không nâng cấp lên phiên bản mới nhất. Chạy dấu nhắc lệnh VS khi quản trị viên hiển thị phiên bản dnvm rc1..., tuy nhiên khi không phải là quản trị viên beta5.... Sau lệnh của bạn, cả hai lệnh nhắc quản trị viên và không phải quản trị viên đều hiển thị dưới dạng rc2...phiên bản (mới nhất).
JabberwockyDecompiler

Đối với những người sử dụng đơn âm và tự hỏi nên chọn dnx451hay dnxcore50câu trả lời này đã giúp tôi hiểu thêm về chủ đề này: stackoverflow.com/a/30846048/89590 Câu trả lời ngắn: dnx451phù hợp với đơn âm.
Nate Cook

8

Bạn có thể đặt một var env tên DNX_TRACEđể 1nhìn thấy một TÔN thông tin chẩn đoán hơn. Được cảnh báo, đó là nhiều thông tin hơn!


@JonSkeet BTW các câu trả lời khác (bao gồm tự trả lời của bạn) chứa thông tin tuyệt vời về chẩn đoán và sửa chữa vấn đề cụ thể bạn gặp phải. Tôi giữ câu trả lời này siêu ngắn gọn vì đó chỉ là một câu trả lời khác có thể dẫn đến nhiều manh mối về lý do tại sao vấn đề xảy ra ngay từ đầu.
Eilon

Hoàn toàn - tôi đánh giá cao điều đó :)
Jon Skeet

3

Để làm cho nó hoạt động tôi đã sửa đổi project.json.. bây giờ nó trông giống như:

{
"dependencies": {
    "Kestrel": "1.0.0-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-*",
    "Microsoft.AspNet.Hosting": "1.0.0-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-*"
},
"commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    }
}

Chìa khóa dường như là phần khung.

Ngoài ra, việc đổi tên đã thay đổi cách k webhoạt động để bây giờ dnx . webhoặcdnx . kestrel

Cập nhật - thêm thông tin

Điều kỳ lạ là, sau khi chạy mà không có khung xác định, nó đã đi và nhận được một loạt các thứ bổ sung khi tôi làm kpm restore:

...
Installing Microsoft.Framework.Logging 1.0.0-beta4-11001
Installing Microsoft.Framework.Logging.Interfaces 1.0.0-beta4-11001
Installing Microsoft.Framework.DependencyInjection.Interfaces 1.0.0-beta4-11010
Installing Microsoft.Framework.DependencyInjection 1.0.0-beta4-11010
Installing Microsoft.Framework.ConfigurationModel 1.0.0-beta4-10976
Installing Microsoft.Framework.ConfigurationModel.Interfaces 1.0.0-beta4-10976
Installing Microsoft.AspNet.Hosting.Interfaces 1.0.0-beta4-11328
Installing Microsoft.AspNet.FeatureModel 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http 1.0.0-beta4-11104
Installing Microsoft.AspNet.FileProviders.Interfaces 1.0.0-beta4-11006
Installing Microsoft.Framework.Caching.Interfaces 1.0.0-beta4-10981
Installing Microsoft.AspNet.FileProviders 1.0.0-beta4-11006
Installing Microsoft.AspNet.Http.Core 1.0.0-beta4-11104
Installing Microsoft.AspNet.WebUtilities 1.0.0-beta4-11104
Installing Microsoft.Net.Http.Headers 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http.Interfaces 1.0.0-beta4-11104
Installing Microsoft.Framework.Runtime.Interfaces 1.0.0-beta4-11257
Installing Microsoft.AspNet.Server.Kestrel 1.0.0-beta4-11262
Installing Microsoft.Net.Http.Server 1.0.0-beta4-11698
Installing Microsoft.Net.WebSockets 1.0.0-beta4-11698
Installing Microsoft.Net.WebSocketAbstractions 1.0.0-beta4-10915
Installing Microsoft.Framework.WebEncoders 1.0.0-beta4-11104
Installing Microsoft.Framework.OptionsModel 1.0.0-beta4-10984
Installing Microsoft.AspNet.Http.Extensions 1.0.0-beta4-11104
Installing Microsoft.AspNet.Diagnostics.Interfaces 1.0.0-beta4-12451
Installing Microsoft.AspNet.RequestContainer 1.0.0-beta4-11328

.. sau đó nó chạy tốt. Sau đó, tôi chuyển trở lại trong phần khung

"frameworks": {
    "dnx451": {}
}

.. và nó vẫn hoạt động, trong khi trước khi nó xảy ra lỗi!

Rất kỳ quặc!

(Tôi đang chạy 1.0.0-beta4-11257 )

Cập nhật thêm

Tôi đã tạo ra một phiên bản Ubuntu mới và gặp lỗi tương tự như bạn .. Tôi nghĩ rằng vấn đề có thể là do nó chỉ cố gắng lấy các gói từ nuget.orgvà không myget.org(có những thứ mới hơn) nên tôi đã bỏ NuGet.Configvào gốc của dự án ..

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" />
    <add key="NuGet" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

.. điều này dường như đã sửa nó cho tôi bằng cách lấy các phiên bản chính xác (sau phiên bản khác kpm restore).


1
Re phần "dnx. Kestrel" - thực sự, do đó lệnh tôi đã hiển thị :) Với cấu hình đó, tôi gặp một lỗi khác: System.TypeLoadException: Không thể tải loại 'Microsoft.Framework.DependencyInjection.LoggingServiceCollectionExtensions' từ lắp ráp 'Microsoft. Framework.Logging, Version = 1.0.0.0, Culture = trung tính, PublicKeyToken = null '. Phiên bản nào của DNX bạn đang sử dụng?
Jon Skeet

1
Khi tôi thực hiện "dnx. Web" lần đầu tiên tôi nhận được: `System.InvalidOperationException: Không thể giải quyết các phụ thuộc sau cho khung mục tiêu 'DNX, Version = v4.5.1' và nó gợi ý một danh sách những thứ nó bị thiếu.
Stephen Pope

Hấp dẫn. Nền tảng này là gì trên, btw?
Jon Skeet

Bạn đã làm 'source ~ / .bashrc' để tải lại các biến môi trường sau khi bạn nâng cấp DNX? Ngoài ra tôi đã phải thực hiện "nâng cấp dnvm" + "dnvm sử dụng mặc định"
Stephen Pope

DNX chưa cập nhật bởi .bashrc ... có thể do tôi đã xây dựng thủ công ngày hôm qua. Thay vào đó, hãy thử sử dụng các hướng dẫn được cập nhật ...
Jon Skeet

2

Những ngày này, tất cả các package.jsonphiên bản của tôi kết thúc bằng"-rc2-*"

(Chỉ các trường hợp ngoại lệ tôi đã thấy cho đến nay là các Microsoft.Framework.Configurationgói, cần phải "1.0.0-rc1-*"hoặc "1.0.0-*")

Liên quan đến "tàu phiên bản" mà @davidfowl đề cập, có vẻ như rất nhiều nỗi đau đã biến mất giữa beta8 và RC2.

dnvm upgrade -u -arch x64 -r coreclr

Tôi đã có nhiều may mắn nhất coreclrvới 2 nguồn cấp dữ liệu NuGet này:

"https://www.myget.org/F/aspnetvnext/"
"https://nuget.org/api/v2/"

Khi tôi làm đã mất tích vấn đề gói, 90% thời gian đó là những thủ phạm giống nhau:

Newtonsoft.Json
Ix-Async
Remotion.Linq

Hầu hết thời gian, tôi có thể khắc phục những điều này bằng cách buộc nguồn cấp dữ liệu chính của NuGet.org:

dnu restore;
dnu restore -s https://nuget.org/api/v2

Đây là config.json làm việc của tôi:

{
"dependencies": {
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc2-*",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc2-*",
    "Microsoft.AspNet.Hosting": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Core": "6.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Razor": "6.0.0-rc2-*",
    "Microsoft.AspNet.Owin": "1.0.0-rc2-*",
    "Microsoft.AspNet.Routing": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-rc2-*",
    "Microsoft.AspNet.Session": "1.0.0-rc2-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc2-*",
    "EntityFramework.Commands": "7.0.0-rc2-*",
    "EntityFramework.Core": "7.0.0-rc2-*",
    "EntityFramework.InMemory": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc2-*",
    "EntityFramework.Relational": "7.0.0-rc2-*",
    "EntityFramework7.Npgsql": "3.1.0-beta8-2",
    "Microsoft.Extensions.Logging.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Framework.Configuration.CommandLine": "1.0.0-*",
    "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-*",
    "Microsoft.Framework.Configuration.Json": "1.0.0-*"
},
"commands": {
    "ef": "EntityFramework.Commands",
    "dev": "Microsoft.AspNet.Hosting --ASPNET_ENV Development --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    "dnxcore50": {}
}
}

Danh sách trên không phải từ config.json mà là project.json nhưng tôi vẫn được nâng cấp bởi vì danh sách này cung cấp cho tôi các phụ thuộc hữu ích mà trước đây tôi không biết.
Ron C

1

Tôi đã gặp vấn đề thiếu phụ thuộc cũng như cố gắng xoa dịu các tài liệu tham khảo dnxcore50 và dnx451.

Nếu tôi hiểu quyền "phụ thuộc" này: {} được chia sẻ giữa các khung.

Sau đó, "phụ thuộc": {} trong "khung": dành riêng cho khung đó.

dnxcore50 là một thời gian chạy mô-đun (khép kín) vì vậy về cơ bản nó chứa tất cả các thời gian chạy cốt lõi cần để chạy một chương trình không giống như khung .net cổ điển nơi bạn có các phụ thuộc cốt lõi nằm rải rác ở nơi khác.

Vì vậy, nói rằng tôi muốn theo cách tiếp cận tối thiểu, tôi đã quyết định lưu trữ trên mac hoặc linux vào một lúc nào đó.

Cập nhật Ran vào các vấn đề phụ thuộc kỳ lạ với lượt xem cshtml, bây giờ mới đi với dnx451.

Đây là dự án của tôi

{
"webroot": "wwwroot",
"version": "1.0.0-*",

"dependencies": {
    "System.Runtime": "4.0.10",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Mvc": "6.0.0-beta4",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6-12075",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6-12457",
    "Microsoft.Framework.DependencyInjection": "1.0.0-beta4",
    "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta5"
 },

"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://admin.heartlegacylocal.com"  },

"frameworks": {
"dnx451": { }
 }
},

"publishExclude": [
"node_modules",
"bower_components",
"**.xproj",
"**.user",
"**.vspscc"
],
"exclude": [
  "wwwroot",
  "node_modules",
  "bower_components"
  ]
}
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.