.NETCoreApp = v1 çerçevesi için çalışma zamanı hedefi bulunamıyor, hedef çalışma zamanlarından biriyle uyumlu


149

Bir Asp.Net Core RC1 projesini RC2'ye geçirmeye çalışıyorum ve bu belgeleri izliyorum ve ayrıca DNX .NET CLI'ye geçiş için yönergeleri izledim.

Denediğimde aşağıdaki hatayı alıyorum dotnet run:

'.NETCoreAPP, Sürüm = v1.0' çerçevesi için çalışma zamanı hedefi, hedef çalışma zamanlarından biriyle uyumlu bulunamıyor: 'win10-x64, win81-x64, win8-x64, win7-x64'. Olası nedenler:

  1. Proje geri yüklenmedi veya geri yüklenemedi - 'dotnet restore' çalıştır
  2. Proje, 'çalışma zamanlarında' win10-x64, win81-x64, win7-x64 'den birini listelemiyor

Koştum dotnet restoreve başarıyla tamamlanmış gibi görünüyor.

İlgili tüm paketleri RC2 olarak güncelledim.

Yanıtlar:


290

Hata mesajının söylediklerini tam olarak yapmalıydım. RC1'den geçiş yaparken, dosyamda bir runtimesbölüm belirtmem gerektiğini fark etmedim project.json.

Benim project.jsonaşağıdaki bölümü ekledim:

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

Ve gitmek için iyiydim.


Güncelleme 27 Şubat 2017

Uygulamanızı (FDD) olarak dağıtmayı seçerseniz , Visual Studio 2017 RC'deki yeni proje şablonları artık çalışma sürelerinin önceden belirtilmesini ( project.jsonveya .csprojiçinde Framework Dependent Deployment) gerektirmez.

Ancak, kullanarak uygulamanızı dağıtmak seçerseniz Self-contained Deployment(SCD), o zaman tüm uygulama üzerinde çalıştırmak istediğiniz çalışma sürelerini belirtmek gerekir önceden sizin de .csprojdosyaya.

Aşağıda, .csprojSCD dağıtım yöntemini kullanan bir uygulama için bir dosya örneği verilmiştir :

<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>

Her iki dağıtım seçeneğinin tam bir açıklamasını, bunların avantajlarını ve dezavantajlarını içeren daha fazla bilgi için lütfen bu bağlantıya bakın .


42
VS 2015 Güncelleme 3'te yeni bir proje oluşturdum. Yine de bu bölüm eksikti.
Edward Olamisan

7
Bu ayarı eklemenin her zaman gerekli olmadığını düşünüyorum. Belgelerde: "Herhangi bir çalışma zamanında çalışabilen taşınabilir bir sınıf kitaplığınız varsa, bir çalışma zamanı belirtmeniz gerekmez." - Bu çoğu projem için geçerli, ancak bu hata çözümüme bir Entity Framework Core projesi eklediğimde ortaya çıktı. Bence EF Core - en azından RC2 durumunda - hangi platformlarda çalışabileceği konusunda bir sınırlamaya sahip, bu yüzden ona referans veren projelerin bu ayarlara uyması gerekebilir. Ama sadece tahmin ediyorum. Belgeler bu noktada gerçekten kafa karıştırıcı.
Bernhard Koenig

7
1.0.1'e güncellenen yeni bir 1.0 Core VS2015 şablonunda buna gerek yoktu ve yukarıdaki hatayı aldım, düzeltme için thx!
Steve McNiven-Scott

1
@ SteveMcNiven-Scott - Burada aynı. Ayrıca "runtimes" başka bir satır eklemek zorunda kaldı ve Ubuntu Server üzerinde kurmak için "ubuntu.16.04-x64". YMMV ancak hata, eksik olduğunuz ve eklemeniz gereken platformu işaret etmelidir.
Çar Bomba

5
Hata iletisinde "project.json" belirtilmez. İnsanların nasıl tahmin etmesi gerekiyor?
usefulBee

76

Bu hatayı VS2015 çekirdek şablonunu 1.0.1'e güncelledikten sonra aldım. Ben çünkü netstandard 1.4 her çalışma zamanı belirtmek istemiyorsanız hedefleyen bir PCL var, Sadece bunun için bağımlılık işaretleme değiştirin Microsoft.NETCore.App:

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

1
Yukarıdaki işaretleme derleme hatamı düzeltti, ancak IIS Express bundan sonra başlamazdı. "Version": "1.0.1" ifadesini "version" olarak değiştirmek: "1.0.0" IIS sorununu çözdü.
Ross

@ Project.json içindeki NETCore.App sürümü ile eşleşecek araçlar bölümünü güncelleyin
DalSoft

Bu durumda "araçlar": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"},
DalSoft

1
@DalSoft - Evet, VS 2015'imi birkaç hafta önce IISIntegration.Tools dahil en son yamalar ile güncelledim ve Microsoft.NETCore.App: 1.0.1 sorununu benim için çözdü.
Ross

1
@usefulBee Taşınabilir Sınıf Kütüphanesi
Mike_G

35

project.json bunu değiştirdim (eklenen tip):

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

Şimdi tekrar inşa edebilirim :-)

güncelleme: şimdi tekrar inşa edebilirim ama web sitesini "çalıştırmaz".

Çalışma zamanı ve sdk'ye da sahip olduğunuzdan emin olmanız gerekir:

*) Visual Studio araçları .NET Core 1.0.1'i içerir. .NET Core 1.1 desteği eklemek için .NET Core 1.1 çalışma zamanını da yüklemeniz gerekir.

https://www.microsoft.com/net/download/core#/current


1
Görünüşe göre web sitesini çalıştıramazsınız çünkü .NET Core 1.1 SDK'yı
Victor Sharovatov

ve bazen de Çalışma Zamanı yeniden yükleme gerekli öğrendim.
juFo

Bu bana yardımcı oldu. Teşekkürler! "Microsoft.NETCore.App" dosyasını doğrudan project.json içindeki bağımlılıklardan yorumlamak ve bunu "frameworks" altında değiştirmek: {"netcoreapp1.1": {"bağımlılıklar": {"Microsoft.NETCore.App": {" sürüm ":" 1.1.0 "," tür ":" platform "}}}},
neodimyum

1
Teşekkür ederim. Bu 2 basit adım sorunu çözdü. Umarım MS yakın gelecekte daha geliştirici dostu yapar.
EvZ

20

Project.json bağımlılıklarımı güncellemek için Visual Studio 2015'te inanılmaz derecede bozuk NuGet Paket Yöneticisi'ni kullandığım için bu hatayı aldım. Bunu çevirdi:

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

bunun içine:

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

Güle güle, platform tanımı!


15

Bu iki bağlantıyı okursanız:

İlk, https://docs.microsoft.com/tr-tr/dotnet/articles/core/tutorials/using-with-xplat-cli

ve

ikinci, https://docs.microsoft.com/tr-tr/dotnet/articles/core/rid-catalog

Project.json içindeki bağımlılık kök öğesinde aşağıdaki snippet'i kullanarak tamamen taşınabilir bir sürüm oluşturabileceğinizi göreceksiniz. Bu, platform agnostik olması gereken veya "Çerçeveye bağlı" olarak bilinen CORE düzeyinde bir çalışma zamanı olduğundan çalışma zamanlarını belirtmeye gerek yoktur.

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

veya aşağıdaki gibi type: platform öğesini kaldırarak birden çok hedefli platform ("bağımsız uygulamalar") için oluşturabilirsiniz:

Bunu project.json'daki bağımlılık kök öğesine ekleyin

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

ve bunu yeni bir kök düzeyi öğesi olarak ekleyin

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

Birden çok hedefli, ".NET Core Runtime IDentifiers (RID)" olarak bilinen platform adlarını sağlamanızı gerektirir. Bunların bir listesi yukarıdaki ikinci bağlantıda bulunabilir. Windows, Linux ve OS X'in birçok çeşidini içerir.

Çeşitli dağıtım seçeneklerine iyi bir genel bakış için bu sayfayı da okuyabilirsiniz:

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

Yukarıdaki bağlantıdan:

.NET Core uygulamaları için iki tür dağıtım oluşturabilirsiniz:

Çerçeveye bağlı dağıtım

Adından da anlaşılacağı gibi, çerçeveye bağlı dağıtım (FDD), hedef sistemde bulunması için sistem genelinde .NET Core'un paylaşılan bir sürümüne dayanır. .NET Core zaten mevcut olduğundan uygulamanız .NET Core yüklemeleri arasında taşınabilir. Uygulamanız yalnızca kendi kodunu ve .NET Core kitaplıklarının dışındaki üçüncü taraf bağımlılıklarını içerir. FDD'ler, komut satırından dotnet yardımcı programı kullanılarak başlatılabilen .dll dosyaları içerir. Örneğin, dotnet app.dll app adında bir uygulamayı çalıştırır.

Bağımsız dağıtım

FDD'den farklı olarak, bağımsız bir dağıtım (SCD) hedef sistemde bulunacak paylaşılan bileşenlere güvenmez. Hem .NET Core kitaplıkları hem de .NET Core çalışma zamanı dahil tüm bileşenler uygulamaya dahil edilmiştir ve diğer .NET Core uygulamalarından yalıtılmıştır. SCD'ler, platforma özgü .NET Core ana bilgisayarının yeniden adlandırılmış bir sürümü olan bir yürütülebilir dosya (app adlı bir uygulama için Windows platformlarında app.exe gibi) ve bir .dll dosyasını (app.dll gibi) içerir. gerçek uygulama.


9

Benim durumumda, tüm nuget paketlerini en son sürümlerine güncelledim ve nuget 'Microsoft.NETCore.App' paket referansımı aşağıdakilere değiştirdi:

"Microsoft.NETCore.App": "1.1.0"

Tekrar aşağıdaki forma değiştirdim ve her şey yolunda gitti:

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

Güle güle hayatımın 3 saati ....


4

yeni bir dotnet çalıştırırsanız ve json çıktı projesine bakarsanız, takma adların değiştiğini göreceksiniz.

Project.json dosyasında aşağıdaki gibi değişiklikler yapın:

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

Benim için bu en iyi çözüm. .NET Core bir akış durumunda ve işler değişmeye devam ediyor. NuGet PM'nin tutarlı ve güncel tutamayacağı gibi, projenizdeki değişiklikleri düzeltmek için bir project.json oluşturmak için CLI'yi kullanma.
James B

0

Aşağıdaki sayfa altında svick tarafından yorumdan yararlı bir bağlantı buldum: https://github.com/dotnet/cli/issues/2442


1
Cevabınız% 100 doğru olsa da, bu bağlantı taşınırsa, değiştirilirse, başka bir siteye birleştirilirse veya ana site kaybolursa% 100 işe yaramaz hale gelebilir ... :-( Bu nedenle, lütfen cevabınızı düzenleyin ve ilgili kopyayı kopyalayın bağlantıdan cevabınıza adım atarak, bu sitenin kullanım ömrünün% 100'ü için cevabınızı garanti eder! ;-) Her zaman cevabınızın altındaki bağlantıyı materyaliniz için bir kaynak olarak bırakabilirsiniz ...
Donald Duck

0

Project.json'da aşağıdakilere ihtiyacınız olduğunu buldum. İşte benim hatamı düzeltmek için gerekli:

Bağımlılıklar

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

çerçeveler

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

Çalışma süresi

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

IIS'de yayınlamayı planlıyorsanız çalışma zamanları eklemek isteyebilirsiniz. Lütfen aşağıdaki gibi bir şeye bakın:

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

İşte benim için iyi çalışan genel bir ipucu. Öğelerim bozulduğunda, bazen project.json ve başka yerlerdeki bağımlılıklara bakmak için web sitesi veya boş web api olarak varsayılan bir ASP.NET Core uygulaması oluştururum. Çoğu zaman bu şekilde birçok şey yakalayabilirsiniz. Yukarıdaki cevaplar nokta, ama ASP.NET Core kullandığı genel şablon biçiminde mantığı daha fazla ayırmak istediği takdirde ben burada yazacağımı düşündüm.


0

VS 2015 ile Windows 7'de, netcore 1.1.2'ye güncelledikten sonra çözüm project.json dosyasını aşağıdaki gibi değiştiriyordu:

{
"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
  }                             //
}

Bunu değiştirdikten sonra bağımlılıklar güncellenir ve ihlal edilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.