โครงการของคุณไม่ได้อ้างถึงกรอบงาน“ .NETFramework, Version = v4.5”


91

ฉันใช้ VS 2015

โครงการของคุณไม่ได้อ้างถึงกรอบงาน ".NETFramework, Version = 4.5" เพิ่มการอ้างอิงถึง ".NETFramework, Version = 4.5" ในส่วน "frameworks" ของ project.json ของคุณจากนั้นเรียกใช้ NuGet restore อีกครั้ง

ฉันได้รับข้อผิดพลาดนี้ในเลเยอร์การเข้าถึงข้อมูลและ Business Logic ของฉันไม่นานหลังจากเพิ่มลงใน MVC Layer จนถึงตอนนั้นสิ่งต่างๆกำลังดำเนินไปด้วยดี แต่ฉันไม่รู้ว่าอะไรทำให้เกิดข้อผิดพลาดนี้ นี่คือ project.json ของฉัน:

{
  "version": "1.0.0-*",
  "description": "foo bar Class Library",
  "authors": [ "foo bar" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",

  "frameworks": {
    "net451": { },
    "dotnet5.4": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Runtime": "4.0.21-beta-23516",
        "System.Threading": "4.0.11-beta-23516"
      }
    }
  }
}

นี่คือสิ่งที่ฉันได้ลอง:

  1. แทนที่ "dotnet5.4" ด้วย "net451" (และลบออก) ดังที่พบในคำตอบนี้

ผลลัพธ์คือข้อผิดพลาดเดียวกัน

  1. แทนที่ "dotnet5.4" ด้วย "net45" และออกจาก "net451" ส่งผลให้เกิดข้อผิดพลาดใหม่:

project.json ของคุณไม่มีส่วน runtimes คุณควรเพิ่ม "" runtimes ": {" win ": {}}" ใน project.json ของคุณจากนั้นเรียกใช้ NuGet restore อีกครั้ง

ฉันลองทำตามข้อผิดพลาดนี้แนะนำและเพิ่ม

"runtimes": {
    "win":  {}
  },

สิ่งนี้ทำให้ฉันเกิดข้อผิดพลาดซึ่งดูเหมือนว่าฉันจะไม่สามารถผ่านพ้นไปได้:

project.json ของคุณไม่แสดงรายการ "win" เป็นรันไทม์เป้าหมาย คุณควรเพิ่ม "win": {} "ไว้ในส่วน" runtimes "ใน project.json ของคุณจากนั้นเรียกใช้ NuGet restore อีกครั้ง

ฉันได้เพิ่มคำว่า "win" แล้วและนี่ก็เริ่มรู้สึกเหมือนปลาชนิดหนึ่ง ฉันกำลังทำอะไรเปลี่ยนแปลง project.json โดยตรง NuGet จัดการสิ่งนี้ไม่ใช่หรือ


สำหรับส่วนแรกให้ไปที่การตั้งค่าโครงการของคุณและตั้งค่ากรอบเป้าหมายเป็น 4.5
Hirbod Behnam

มันถูกกำหนดไว้อย่างนั้นแล้ว
S. Loveland ECY

1
@ S.LovelandECY ได้รับการแก้ไขแล้วหรือยัง? ฉันประสบปัญหาเดียวกันไม่ว่าฉันจะใช้ 4.5.1, 4.5.2 หรือ 4.6 - โครงการทั้งหมดของฉันทั้งหมดใช้เวอร์ชันเฟรมเวิร์กเดียวกัน
Thierry

@ S.LovelandECY คุณอาจต้องการพิจารณาเปลี่ยนคำตอบที่ได้รับการยอมรับเนื่องจากความแตกต่างระหว่างคะแนนโหวตและคำตอบที่ได้รับการโหวตสูงสุด
RJFalconer

คำตอบ:


10

ที่จริงฉันเพิ่งค้นพบปัญหา ฉันคลิกRestore Nuget Packagesที่ระดับโซลูชันและฉันสามารถรวบรวมPCLไฟล์ของฉันได้จากนั้นก็จัดการกับโซลูชันที่เหลือ

หวังว่านี่จะช่วยได้


1
คำตอบนี้คือสิ่งที่เกี่ยวข้องสำหรับฉัน
kovac

188

ฉันมีปัญหาเดียวกันนี้และฉันต้องไม่เพียง แต่ลบเนื้อหาbinและobjโฟลเดอร์เท่านั้น แต่ยังรวมถึง.vsไดเร็กทอรีสำหรับการแก้ปัญหาด้วย


1
.vs ทำให้เกิดปัญหาสำหรับฉัน
Lukas

7
นี่คือทางออกสำหรับฉัน!
Riki

9
.vs ไม่จำเป็นสำหรับฉัน ขอบคุณ!
geynske006

2
ฉันไม่รู้ว่าจะขอบคุณอย่างไรดี ฉันเกาหัวมาเกือบชั่วโมงแล้วที่พยายามคิดเรื่องนี้ ลบทั้ง 3 และทำงานอย่างมีเสน่ห์ +1
tfrascaroli

2
ฉันมีข้อสงสัยว่าปัญหานี้เกิดจากการเปลี่ยนสาขา GitHub ในกล่องการพัฒนาในพื้นที่ของฉัน นั่นคือฉันทำงานในสาขาเดียวและการคอมไพล์สร้างไฟล์จำนวนมากซึ่งไม่ได้เป็นส่วนหนึ่งของที่เก็บ จากนั้นฉันจะเช็คเอาต์สาขาอื่นและไฟล์ที่ไม่ใช่ที่เก็บเหล่านี้ยังคงอยู่ อย่างไรก็ตามพวกเขาขัดแย้งกับไฟล์ที่เพิ่งเช็คเอาต์
Phoeniceus Agelaius

128

ฉันมีปัญหาเดียวกัน - สิ่งนี้เกิดขึ้นโดยยังคงใช้ Visual Studio 2017.3 ซึ่งใช้ไฟล์. csproj แทน project.json ที่น่าสนใจคือข้อความแสดงข้อผิดพลาดยังคงมีข้อความ "project.json"

มันจะปรากฏขึ้นสาเหตุของปัญหานี้เป็นแฟ้มล็อคหรือobj\project.assets.jsonไฟล์ (ขึ้นอยู่กับรุ่นของ VS) จากการสร้างก่อนหน้านี้ซึ่งไม่ถูกลบออกในระหว่างการทำความสะอาดตามที่อธิบายไว้ที่นี่

การลบ/objไดเร็กทอรีด้วยตนเองเป็นวิธีแก้ปัญหาอย่างรวดเร็ว

หากคุณมีโปรเจ็กต์ "ใหม่" (เช่น. NET Core หรือโปรเจ็กต์ netstandard ที่สร้างใน VS 2017) และโปรเจ็กต์ "เก่า" ในไดเร็กทอรีเดียวกัน (เช่นโปรเจ็กต์. NET 4.6 ที่สร้างใน VS 2015) ดูเหมือนว่าพวกเขาจะต่อสู้อย่างต่อเนื่องเพราะ ทั้งคู่ใช้./objdir ในรูปแบบที่แตกต่างกัน ข้อมูลเพิ่มเติมที่นี่ .

วิธีแก้ปัญหา msbuild คือทำให้หนึ่งในโปรเจ็กต์ของคุณใช้objdir อื่น ฉันเพิ่มสิ่งนี้ใน csproj "เก่า" ของฉัน:

<PropertyGroup>
  <!-- Needed due to old project and new project in same directory: https://github.com/NuGet/Home/issues/5126 -->
  <BaseIntermediateOutputPath>obj_netfx\</BaseIntermediateOutputPath>
</PropertyGroup>

4
วิธีแก้ปัญหานี้ใช้ได้ดีกับ VS 2017 คุณช่วยฉันได้ทันเวลา
MechanicalCoder

2
ยอดเยี่ยม. คำอธิบายที่ยอดเยี่ยมเช่นกัน
Mick Byrne

1
ให้ฉันเพิ่มคำขอบคุณ การลบโฟลเดอร์ "obj" ที่ละเมิดทั้งหมดช่วยแก้ปัญหาของฉันได้เช่นกัน
Stuart

2
ขอพระเจ้าอวยพรคุณ! ฉันสงสัยว่าไฟล์ project.json เปื้อนเลือดอยู่ที่ไหน การลบ / obj ทำได้แล้ว
Vishnoo Rath

1
ยังคงเป็นปัญหาแม้ใน VS 2019 ขอบคุณสำหรับแนวทางแก้ไข!
user2363676

27

ฉันพบว่า project.lock.json หลอกลวงทำให้เกิดปัญหานี้สำหรับฉัน เมื่อฉันลบไฟล์ปัญหาก็หายไป

นี่คือเอกสารบางส่วนเกี่ยวกับ project.lock.json

คำแนะนำเพิ่มเติมบางประการคือเพื่อให้แน่ใจว่า project.lock.json ถูกละเว้นในไฟล์ git ไม่สนใจของคุณและลองใช้ git ทั้งหมด ตรวจสอบให้แน่ใจว่าคุณเข้าใจผลของ Git clean ก่อนที่จะดำเนินการดังกล่าว


2

ฉันมีปัญหาเดียวกันหลังจากอัปเดตเป็น Visual Studio สำหรับ Mac 7.4 (build 1033):

Error: Your project is not referencing the "MonoAndroid,Version=v7.1" framework. Add a reference to "MonoAndroid,Version=v7.1" in the "frameworks" section of your project.json, and then re-run NuGet restore.

ฉันไม่มีไฟล์โครงการ json เคล็ดลับในที่นี้ก็ไม่ได้ช่วยอะไรเช่นกันดังนั้นฉันจึงต้องหาวิธีที่ยากลำบากในการติดตั้ง Android SDK ล่าสุด (Oreo 8.1) นอกเหนือจาก SDK เป้าหมายของฉัน (Nougat 7.1)

ป้อนคำอธิบายภาพที่นี่


0

ฉันมีปัญหาเดียวกัน แต่ฉันได้แก้ไขแล้วโดยการเพิ่มทรัพยากรแพ็คเกจนักเก็ตที่ vs2017-->tools-->options-->Nugetpacakge manager--->updatedเหมาะสมใน url แพ็คเกจที่เหมาะสม

ดูภาพด้านล่าง

ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.