บางครั้งการเพิ่มการอ้างอิงบริการ WCF จะสร้างการอ้างอิงที่ว่างเปล่า


159

บางครั้งการเพิ่มการอ้างอิงบริการ WCF จะสร้างการอ้างอิงที่ว่างเปล่าและฉันไม่สามารถอ้างอิงบริการได้ทุกที่ในโครงการ

มีใครพบกับสิ่งนี้หรือไม่?

คำตอบ:


377

โดยทั่วไปผมพบว่ามันเป็นปัญหารหัส-Gen และมากที่สุดเป็นเพราะฉันมีชื่อที่ขัดแย้งกันซึ่งไม่สามารถแก้ไขได้

หากคุณคลิกขวาที่ข้อมูลอ้างอิงบริการของคุณแล้วคลิกกำหนดค่าและยกเลิกการเลือก "ประเภทการใช้ซ้ำในแอสเซมบลีที่อ้างอิง"อาจเป็นไปได้ว่าปัญหาจะหายไป

หากคุณใช้คุณสมบัติบางอย่างของคุณสมบัตินี้คุณอาจต้องตรวจสอบให้แน่ใจว่าชื่อของคุณถูกลบทิ้ง


5
เมื่อมันเกิดขึ้นกับฉันฉันพบว่าฉันยังต้องเปลี่ยนประเภทคอลเลกชันจาก ObjectModel.ObservableCollection เป็น Generic.List
Yossi Dahan

2
เกิดขึ้นกับฉันเพราะฉันเพิ่มในชั้นเรียนบางส่วน
Makotosan

2
อย่างไรก็ตามถ้าคุณต้องการใช้ประเภทจากชุดประกอบที่เฉพาะเจาะจงคุณสามารถเลือกชุดประกอบนั้นและมันก็ใช้ได้เช่นกัน (อย่างน้อยในกรณีของฉัน), ta
Dead.Rabit

26
มันรบกวนความคิดของฉันว่าฉันจะได้คะแนนเฉลี่ย 50 คะแนนต่อสัปดาห์จากคำถามนี้แม้แต่ 6 ปีต่อมา Come on MS, แก้ไขสิ่งนี้ อย่างน้อยก็ให้คำติชมแก่นักพัฒนาเมื่อสิ่งนี้ไปได้ไม่ดีแทนที่จะให้พวกเขาจ้องที่ไฟล์เปล่า
Anderson Imes

1
9 ปีต่อมาและคุณยังช่วยเหลืออยู่ ขอบคุณ!
พารามิเตอร์

38

เนื่องจากคำตอบที่ได้รับการยอมรับชี้ให้เห็นปัญหาการอ้างอิงประเภทเมื่อนำมาใช้ซ้ำประเภทอาจเป็นผู้ร้าย ฉันพบเมื่อคุณไม่สามารถระบุปัญหาได้อย่างง่ายดายจากนั้นใช้บรรทัดคำสั่ง svcutil.exe จะช่วยให้คุณเปิดเผยปัญหาพื้นฐาน (ตามที่ John Saunders ชี้ให้เห็น)

เป็นการปรับปรุงที่นี่เป็นตัวอย่างรวดเร็วของการใช้ svcutil

svcutil /t:code https://secure.myserver.com/services/MyService.svc /d:test /r:"C:\MyCode\MyAssembly\bin\debug\MyAssembly.dll"

ที่ไหน:

  • / t: รหัสสร้างรหัสจาก url ที่กำหนด
  • / d: เพื่อระบุไดเรกทอรีสำหรับผลลัพธ์
  • / r: เพื่อระบุการอ้างอิงแอสเซมบลี

การอ้างอิงบรรทัดคำสั่งแบบเต็ม svcutil ที่นี่: http://msdn.microsoft.com/en-us/library/aa347733.aspx

เมื่อคุณเรียกใช้ svcutil คุณควรเห็นข้อยกเว้นที่เกิดจากการนำเข้า คุณอาจได้รับข้อความประเภทนี้เกี่ยวกับประเภทใดประเภทหนึ่งของคุณ: "ประเภทอ้างอิงไม่สามารถใช้งานได้เนื่องจากไม่ตรงกับ DataContract ที่นำเข้า"

สิ่งนี้สามารถระบุได้ง่ายๆว่ามีความแตกต่างในประเภทใดประเภทหนึ่งในชุดประกอบที่อ้างอิงจากสิ่งที่สร้างขึ้นใน DataContract สำหรับบริการ ในกรณีของฉันบริการที่ฉันกำลังนำเข้ามีประเภทที่ใหม่กว่าอัปเดตจากสิ่งที่ฉันมีในแอสเซมบลีที่แชร์ สิ่งนี้ไม่ชัดเจนเนื่องจากประเภทที่กล่าวถึงในข้อยกเว้นนั้นเหมือนกัน สิ่งที่แตกต่างคือหนึ่งในประเภทคอมเพล็กซ์ซ้อนกันที่ใช้โดยประเภท

มีสถานการณ์ที่ซับซ้อนมากขึ้นอื่น ๆ ที่อาจทำให้เกิดข้อยกเว้นประเภทนี้และทำให้เกิดการอ้างอิงที่ว่างเปล่า นี่คือตัวอย่างหนึ่ง

หากคุณประสบปัญหานี้และคุณไม่ได้ใช้งานประเภททั่วไปในสัญญาข้อมูลของคุณและไม่ได้ใช้งาน IsReference = true ฉันขอแนะนำให้คุณตรวจสอบเพื่อยืนยันว่าประเภทที่ใช้ร่วมกันของคุณเหมือนกันกับลูกค้าและเซิร์ฟเวอร์ของคุณ มิฉะนั้นคุณอาจประสบปัญหานี้


ในกรณีของฉันสิ่งนี้เกิดขึ้นหลังจากฉันอ้างอิงแอสเซมบลีที่อ้างอิงบริการ WCF ของฉันด้วย เอาแอสเซมบลีนั้นออกจากรายการแอสเซมบลีเพื่อแชร์ชนิดด้วยการแก้ไข
xr280xr

ฉันได้รับข้อความแสดงข้อผิดพลาดที่ไร้ความหมาย (เพียง namespace) เมื่อเพิ่มการอ้างอิงบริการและสิ่งนี้ชี้ให้เห็นปัญหา
bcampolo

12

เมื่อสิ่งนี้เกิดขึ้นให้ดูในหน้าต่างข้อผิดพลาดและหน้าต่างผลลัพธ์เพื่อดูว่ามีข้อความผิดพลาดหรือไม่ หากวิธีนี้ไม่ได้ผลให้ลองเรียกใช้svcutil.exeด้วยตนเองและดูว่ามีข้อความแสดงข้อผิดพลาดหรือไม่


@ วิธีการเรียกใช้ svcutil.exe? คุณสามารถช่วยฉันได้ไหม ?
Arul Sidthan

@Arul: ใช้ Google เพื่อค้นหาข้อมูลใน svcutil.exe
จอห์นแซนเดอร์

2
ไม่แน่ใจว่า Microsoft ได้อ่านโพสต์นี้แล้วหรือแม้กระทั่งเพิ่งแสดงกล่องข้อความที่บอกถึงข้อผิดพลาดและคำเตือนแทนที่จะวางไว้ในหน้าต่าง (ย่อเล็กสุดในกรณีของฉัน) หน้าต่างรายการข้อผิดพลาดจะทำให้ฉันไม่ต้อง Google นี้. อีกวิธีหนึ่งฉันคิดว่ามันจะมีประโยชน์หากแท็บแสดงเป็นสีแดงหรือสีเหลืองเมื่อมีคำเตือน / ข้อผิดพลาดใหม่
jrh

12

ฉันทุบตีหัวของฉันตลอดทั้งวันด้วยปัญหาที่แน่นอนนี้ ฉันเพิ่งแก้ไขมัน นี่คือวิธี ...

บริการมีการเรียกใช้ผ่าน SSL (คือมันจะอยู่ที่https://mydomain.com/MyService.svc )

การเพิ่มการอ้างอิงบริการไปยังบริการ WCF บนเซิร์ฟเวอร์การพัฒนานั้นใช้ได้ดี

การปรับใช้บิลด์ของบริการ WCF ที่แน่นอนบนเซิร์ฟเวอร์การผลิตจริงจากนั้นสลับไปยังแอปพลิเคชันไคลเอนต์และกำหนดค่าการอ้างอิงบริการให้ชี้ไปที่บริการสดที่แสดงไม่มีข้อผิดพลาด แต่แอปจะไม่สร้าง: ปรากฎว่า ไฟล์ Reference.cs ว่างเปล่าอย่างสมบูรณ์! การอัปเดตข้อมูลอ้างอิงบริการไม่มีความแตกต่าง การทำความสะอาดโซลูชันไม่ได้ช่วย การเริ่มต้น VS2010 ไม่ได้สร้างความแตกต่าง การสร้างโซลูชันเปล่าใหม่เริ่มโครงการคอนโซลและเพิ่มการอ้างอิงบริการไปยังบริการสดที่มีปัญหาเดียวกันทั้งหมด

ฉันไม่คิดว่ามันเป็นเพราะประเภทที่ขัดแย้งหรืออะไรก็ตาม แต่สิ่งที่ heck - ฉันกำหนดค่าการอ้างอิงบริการ WCF ใหม่โดยการยกเลิกการเลือก "ใช้ซ้ำประเภทในแอสเซมบลีที่อ้างอิงทั้งหมด" ไม่มีความสุข ฉันใส่เครื่องหมายถูกกลับ

ขั้นตอนต่อไปคือลองsvcutilบน URL อ้างอิงเพื่อดูว่าจะช่วยเปิดเผยปัญหาได้หรือไม่ นี่คือคำสั่ง:

svcutil /t:code https://mydomain.com/MyService.svc /d:D:\test

สิ่งนี้ผลิตต่อไปนี้:

Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.1]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'https://mydomain.com/MyService.svc' using WS-Metadata Exchange or DISCO.
Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Schema with target namespace 'http://mynamespace.com//' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://mynamespace.com//']/wsdl:portType[@name='IMyService']


Error: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://mynamespace.com//']/wsdl:portType[@name='IMyService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_IMyService']


Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_IMyService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='MyService']/wsdl:port[@name='WSHttpBinding_IMyService']


Generating files...
Warning: No code was generated.
If you were trying to generate a client, this could be because the metadata documents did not contain any valid contracts or services
or because all contracts/services were discovered to exist in /reference assemblies. Verify that you passed all the metadata documents to the tool.

Warning: If you would like to generate data contracts from schemas make sure to use the /dataContractOnly option.

นั่นทำให้ฉันนิ่งงันอย่างสมบูรณ์ แม้ว่า googling หนักและข้ามค่อนข้างมากและพิจารณาอาชีพในฐานะคนขับรถบัสอีกครั้งในที่สุดฉันก็คิดว่าทำไมมันถึงทำงานได้ดีบนกล่องพัฒนา อาจเป็นปัญหาการกำหนดค่า IIS หรือไม่

ฉัน remoting พร้อมกันลงในทั้งกล่องพัฒนาและกล่องถ่ายทอดสดและในแต่ละครั้งที่ฉันเปิดโปรแกรม IIS Manager (เรียกใช้ IIS 7.5) ต่อไปฉันผ่านการตั้งค่าแต่ละครั้งในแต่ละกล่องเปรียบเทียบค่าในแต่ละเซิร์ฟเวอร์

และมีปัญหา: ภายใต้ "การตั้งค่า SSL" สำหรับไซต์ตรวจสอบให้แน่ใจว่าได้เลือก "ต้องใช้ SSL" และตรวจสอบปุ่มตัวเลือกใบรับรองลูกค้าสำหรับ "ยอมรับ" แก้ไขปัญหาแล้ว!


5

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

  1. ลบการอ้างอิงบริการที่มีปัญหา
  2. คลิกที่ชื่อโครงการในSolution Explorerเพื่อเน้นโครงการ
  3. คลิกขวาที่การอ้างอิงโครงการ
  4. ใกล้กับส่วนบนสุดของรายการบริบทคลิกรายการClean
  5. เพิ่มการอ้างอิงบริการของคุณตามปกติ

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


3

ฉันมีปัญหานี้กับ Silverlight 5 ที่อัปเกรดจากรุ่นก่อนหน้า

แม้แต่การเพิ่มการอ้างอิงบริการอีกครั้งก็ยังให้ฉัน Reference.cs ที่ว่างเปล่า

ฉันสิ้นสุดต้องสร้างโครงการใหม่และสร้างการอ้างอิงบริการอีกครั้ง นี่เป็นสิ่งที่ควรลองถ้าคุณใช้เวลามากกว่านี้ไปครึ่งชั่วโมง แม้ว่าคุณจะมุ่งมั่นที่จะแก้ไขโครงการดั้งเดิมคุณอาจต้องการลองทำสิ่งนี้เพื่อดูว่าเกิดอะไรขึ้นจากนั้นลองย้อนกลับเพื่อแก้ไขปัญหา

ฉันไม่เคยคิดออกว่าปัญหาคืออะไร - แต่อาจมีบางอย่างในไฟล์. csproj ไม่ได้รับการอัพเกรดหรือการตั้งค่าบางอย่างผิดพลาด


1
ตกลงมันเปิดออกฉันถูกอ้างอิงรุ่นเก่าของSystem.Xml.Linq- ดังนั้นตรวจสอบรุ่นของ DLLs ของคุณถ้าคุณได้เปลี่ยนรุ่น
Simon_Weaver

1

หากคุณเพิ่งเพิ่มคอลเล็กชันในโครงการของคุณเมื่อสิ่งนี้เริ่มเกิดขึ้นปัญหาอาจเกิดจากการรวบรวมสองชุดที่มีแอตทริบิวต์CollectionDataContractเดียวกัน:

[CollectionDataContract(Name="AItems", ItemName="A")]
public class CollectionA : List<A> { }

[CollectionDataContract(Name="AItems", ItemName="A")]  // Wrong
public class CollectionB : List<B> { }

ฉันคงผิดพลาดโดยการกวาดผ่านโครงการของฉันและสร้างความมั่นใจว่าทุกชื่อและItemNameแอตทริบิวต์เป็นเอกลักษณ์:

[CollectionDataContract(Name="AItems", ItemName="A")]
public class CollectionA : List<A> { }

[CollectionDataContract(Name="BItems", ItemName="B")]  // Corrected
public class CollectionB : List<B> { }

จากนั้นฉันรีเฟรชข้อมูลอ้างอิงบริการและทุกอย่างทำงานได้อีกครั้ง


1

ปัญหาของฉันคือฉันทิ้ง " mex " ไว้ที่ส่วนท้ายของลิงก์บริการเว็บของฉัน

แทนที่จะเป็น " http://yeagertech.com/yeagerte/YeagerTechWcfService.YeagerTechWcfService.svc/mex "

ใช้ " http://yeagertech.com/yeagerte/YeagerTechWcfService.YeagerTechWcfService.svc "


ชัดเจนมาก แต่มองข้ามหรือเลิกใช้งานได้ง่าย
Carl Onager

1

เทคนิคที่เหมาะกับฉันในกรณีของฉันหลังจากอ่านคำตอบเหล่านี้เพื่อประโยชน์ไม่ได้เป็นเพียงเพื่อแสดงความคิดเห็นทั้งหมดของสัญญาของฉันและบิต uncomment จนกว่ามันจะไม่ทำงานอีกต่อไปในการค้นหาแบบไบนารี นั่นทำให้แคบลงเล็กน้อยของรหัสที่ละเมิด

จากนั้นคุณต้องเดาว่าเกิดอะไรขึ้นกับรหัสนั้น

ข้อเสนอแนะข้อผิดพลาดบางอย่างในเครื่องมือจะช่วยแน่นอน

ฉันกำลังเขียนสัญญาบริการเว็บ ฉันมีตัวยึด enum โดยไม่มีสมาชิก ไม่เป็นไร. แต่ถ้าฉันใช้มันในทรัพย์สินของคลาสอื่นและใช้สัญญา dll ซ้ำบนไคลเอนต์ codegen จะระเบิดโดยไม่มีข้อผิดพลาด ใช้ svcutil.exe ไม่ได้ช่วยมันก็แค่ล้มเหลวในการส่งออกไฟล์ cs โดยไม่พูดถึงเหตุผล


การแสดงความคิดเห็นว่าสัญญาการดำเนินงานทั้งหมดนั้นใช้ได้สำหรับฉัน ฉันกำลังดูวิธีการที่ผิดในฐานะผู้กระทำผิด ขอขอบคุณสำหรับแนวทางการแก้ไขปัญหากลับไปสู่พื้นฐาน
fizch

1

ต่อไปนี้ไม่ได้อยู่ในรายการที่นี่และเป็นวิธีแก้ปัญหาที่ฉันนำมาใช้ (SvcUtils มีประโยชน์ในการดูข้อความแสดงข้อผิดพลาดอย่างไรก็ตามข้อผิดพลาดที่ฉันได้รับคือwrapper type message cannot be projected as a data contract type since it has multiple namespacesความหมายฉันปฏิบัติตามลูกค้าเป้าหมายนี้และเรียนรู้wsdl.exeผ่านโพสต์นี้ )

ในกรณีของฉันเพียงแค่เรียกใช้ wsdl [ my-asmx-service-address ] สร้าง.csไฟล์ที่ไม่มีปัญหาซึ่งฉันรวมอยู่ในโครงการของฉันและเริ่มใช้บริการ


0

เป็น @dblood ชี้ให้เห็นความเจ็บปวดหลักอยู่ใน DataContractSerializer ที่ไม่ได้ใช้ชนิดนั้นอีกครั้งอย่างถูกต้อง มีคำตอบอยู่แล้วที่นี่ดังนั้นฉันจะเริ่มด้วยการเพิ่มผู้เชี่ยวชาญและข้อเสียเกี่ยวกับสิ่งเหล่านี้:

  • การตั้งค่าสถานะ 'IsReference' ทำให้เกิดปัญหามาก แต่การลบออกอาจไม่ใช่คำตอบเสมอ (โดยเฉพาะ: ในสถานการณ์ที่มีการเรียกซ้ำ)
  • ปัญหาพื้นฐานคือสัญญาข้อมูลนั้นไม่เหมือนกันกับชื่อประเภทแม้ว่าบางครั้งพวกเขาจะเป็น (ใช่มั้ยคุณอ่านถูกต้องแล้ว!) เห็นได้ชัดว่า serializer ค่อนข้างจู้จี้จุกจิกและมันยากมากที่จะหาปัญหาจริง
  • การลบ 'การตรวจสอบการอ้างอิง' ออกจากงาน 'กำหนดค่าการอ้างอิงบริการ' แต่จะทำให้คุณมีการนำไปใช้หลายครั้ง อย่างไรก็ตามฉันมักจะใช้ SOAP interfaces ซ้ำ ๆ ใน DLL นอกจากนี้ใน SOA ที่เป็นผู้ใหญ่ส่วนใหญ่แล้วที่ฉันรู้บริการอินเทอร์เฟซหลายบริการใช้และขยายคลาสอินเทอร์เฟซเดียวกัน การลบ 'ใช้ประเภทที่อ้างอิง' จะตรวจสอบผลลัพธ์ในสถานการณ์ที่คุณไม่สามารถส่งผ่านวัตถุได้อีกต่อไป

โชคดีถ้าคุณเป็นผู้ควบคุมการให้บริการของคุณมีวิธีแก้ปัญหาง่ายๆที่แก้ปัญหาเหล่านี้ทั้งหมด ซึ่งหมายความว่าคุณยังคงสามารถใช้อินเตอร์เฟสบริการข้าม DLL ได้ซึ่งเป็น IMO ที่ต้องมีเพื่อการแก้ปัญหาที่เหมาะสม นี่คือวิธีการแก้ปัญหาการทำงาน:

  1. สร้าง DLL อินเตอร์เฟสแยกต่างหาก ใน DLL นั้นให้รวม DataContract และ ServiceContract ทั้งหมด ใส่ ServiceContract's บนอินเทอร์เฟซของคุณ
  2. สืบทอดการปรับใช้เซิร์ฟเวอร์จากอินเตอร์เฟส
  3. ใช้ DLL เดียวกันเพื่อสร้างไคลเอนต์โดยใช้วิธีการที่คุณชื่นชอบ ตัวอย่างเช่น (IMyInterface เป็นอินเทอร์เฟซสัญญาบริการ):

    var httpBinding = new BasicHttpBinding();
    var identity = new DnsEndpointIdentity("");
    var address = new EndpointAddress(url, identity, new AddressHeaderCollection());
    var channel = new ChannelFactory<IMyInterface>(httpBinding, address);
    return channel.CreateChannel();

กล่าวอีกนัยหนึ่ง: อย่าใช้ฟังก์ชั่น 'เพิ่มบริการอ้างอิง'แต่บังคับให้ WCF ใช้ประเภทบริการ (ถูกต้อง) โดยข้ามการสร้างพร็อกซี ท้ายที่สุดคุณมีคลาสเหล่านี้แล้ว

ข้อดี:

  1. คุณข้ามกระบวนการ svcutil.exe ซึ่งหมายความว่าคุณไม่มีปัญหา IsReference
  2. DataContract ประเภทและชื่อถูกต้องตามคำจำกัดความ; ท้ายที่สุดทั้งเซิร์ฟเวอร์และไคลเอนต์ใช้นิยามเดียวกัน
  3. หากคุณขยาย API หรือใช้ชนิดจาก DLL อื่นยังคงมี (1) และ (2) อยู่ดังนั้นคุณจะไม่ทำงานในกรณีที่มีปัญหา

จุดด้อย:

  1. วิธีการซิงค์เป็นสิ่งที่เจ็บปวดเนื่องจากคุณไม่ได้สร้างพร็อกซีแบบซิงค์ ดังนั้นฉันจึงไม่แนะนำให้ทำเช่นนี้ในแอปพลิเคชัน Silverlight

0

ฉันยังมีปัญหาของการอ้างอิงบริการที่ใช้งานไม่ได้เมื่อทำงานกับการอ้างอิงโครงการทั้งสองด้าน (โครงการบริการและโครงการที่มีการอ้างอิงถึงบริการ) หาก. dll ของโครงการที่อ้างถึงนั้นถูกเรียกว่า "Contoso.Development.Common" แต่ชื่อโครงการนั้นย่อมาจาก "Common" แต่โครงการที่อ้างอิงถึงโครงการนี้ก็มีชื่อว่า "Common" บริการคาดว่าจะมีการอ้างอิงถึง "Contoso.Development.Common" สำหรับการแก้ไขชั้นเรียน (หากเปิดใช้งานตัวเลือกนี้ในตัวเลือกการอ้างอิงบริการ)

ดังนั้นด้วย explorer ฉันเปิดโฟลเดอร์ของโครงการที่อ้างอิงบริการและโครงการ "ทั่วไป" มีฉันแก้ไขไฟล์โครงการ VS (.csproj) ด้วย notepad ค้นหาชื่อของโครงการอ้างอิง (ซึ่งคือ "Common.csproj" ในตัวอย่างนี้) และคุณจะพบรายการกำหนดค่าที่แสดงถึงการอ้างอิงโครงการอย่างรวดเร็ว

ฉันเปลี่ยน

<ProjectReference Include="..\Common\Common.csproj"> <Project>{C90AAD45-6857-4F83-BD1D-4772ED50D44C}</Project> <Name>Common</Name> </ProjectReference>

ถึง

<ProjectReference Include="..\Common\Common.csproj"> <Project>{C90AAD45-6857-4F83-BD1D-4772ED50D44C}</Project> <Name>Contoso.Development.Common</Name> </ProjectReference>

สิ่งที่สำคัญคือการเปลี่ยนชื่อของการอ้างอิงถึงชื่อของ dll ที่อ้างอิงโครงการได้เป็นเอาท์พุท

จากนั้นสลับกลับไปเป็น VS ที่นั่นคุณจะถูกขอให้โหลดโครงการใหม่เนื่องจากมีการแก้ไขนอก VS คลิกที่ปุ่มโหลดซ้ำ

หลังจากทำเช่นนั้นการเพิ่มและไม่อัพเดทการอ้างอิงบริการทำงานได้ตามที่คาดไว้

หวังว่านี่จะช่วยคนอื่นด้วย

ขอแสดงความนับถือ MH


0

ฉันประสบปัญหาคล้ายกันเมื่อวานนี้ในระหว่างการพัฒนา ฉันพบว่าฉันใช้เนมสเปซเดียวกันในสัญญาต่างรุ่นสองรุ่น

เรามีสัญญา 2 รุ่นเช่น version4 และ version5 ฉันได้คัดลอกสัญญาทั้งหมดจาก version4 และเปลี่ยนชื่อ namespace ทั้งหมดจาก version4 เป็น version5 ในขณะที่ทำสิ่งนี้ฉันลืมเปลี่ยนชื่อเนมสเปซจาก v4 เป็น v5 ในไฟล์ใดไฟล์หนึ่ง เนื่องจากความขัดแย้งของเนมสเปซไฟล์ Reference.cs ว่างเปล่า

ปัญหานี้แก้ไขได้ยากเนื่องจากคุณไม่ได้รับข้อความแสดงข้อผิดพลาดใด ๆ ในขณะที่สร้างการอ้างอิงบริการ เพื่อระบุปัญหานี้ฉันจะตรวจสอบไฟล์ใหม่ทั้งหมดที่ฉันสร้างขึ้นด้วยตนเอง มีวิธีอื่นในการแก้ไขปัญหานี้ นี่เป็นขั้นตอนแรกที่คุณควรดำเนินการก่อนเลือกตัวเลือกอื่น ๆ


0

ขอบคุณ John Saunders ที่โพสต์ด้านบนซึ่งทำให้ฉันมีความคิดที่จะมองเข้าไปในหน้าต่างข้อผิดพลาด ฉันห่อของฉันไว้ตลอดทั้งวันและมองไปที่หน้าต่าง Output เพื่อหาข้อผิดพลาด

ในกรณีของฉันผู้ร้ายถูกปรับไม่ได้ ฉันมีคลาส DataContract พร้อมคุณสมบัติ DataMember ประเภทข้อยกเว้น คุณไม่สามารถมี DataMember ประเภทใดก็ได้ที่มีคำหลักที่ปรับเปลี่ยนได้ ในข้อยกเว้นนี้มีการปรับเปลี่ยนได้ทันทีที่ฉันลบมันทุกอย่างทำงานเหมือนมีเสน่ห์


0

เมื่อพยายามแก้ไขปัญหานี้ด้วยsvcutilฉันได้รับข้อผิดพลาดที่อ้างถึงในคำตอบของ dblood ("ประเภทอ้างอิงไม่สามารถใช้งานได้เนื่องจากไม่ตรงกับ DataContract ที่นำเข้า")

ในกรณีของฉันสาเหตุพื้นฐานดูเหมือนจะเป็นประเภท enum ที่มีแอตทริบิวต์ DataContract แต่สมาชิกที่ไม่ได้ทำเครื่องหมายด้วยคุณสมบัติ EnumMember ระดับปัญหาsvcutilชี้ไปที่มีคุณสมบัติที่มีประเภท enum นั้น

นี่น่าจะเหมาะกว่ากับความเห็นต่อคำตอบของ dblood แต่ตัวแทนไม่เพียงพอสำหรับเรื่องนั้น ...


0

ในกรณีของฉันฉันมีวิธีแก้ปัญหาด้วยโครงการ VB Web Forms ที่อ้างถึง C # UserControl ทั้งโครงการ VB และโครงการ CS มีการอ้างอิงบริการกับบริการเดียวกัน การอ้างอิงปรากฏภายใต้การอ้างอิงบริการในโครงการ VB และภายใต้การเชื่อมต่อบริการกลุ่มในโครงการ CS (กรอบ)

เพื่ออัปเดตการอ้างอิงบริการ (เช่นรับไฟล์ Reference.vb เป็นไม่ว่าง) ในโครงการ VB web form ฉันจำเป็นต้องลบโครงการ CS จากนั้นอัปเดตการอ้างอิงบริการ VB จากนั้นเพิ่มโครงการ CS กลับเข้าไปใน การแก้ไขปัญหา.


0

ทำตามขั้นตอนเหล่านี้:

  1. ลบการอ้างอิงบริการ
  2. ปิด Visual Studio
  3. ลบ / bin และ / Obj โฟลเดอร์
  4. เปิด Visual Studio
  5. เพิ่มการอ้างอิงบริการ
  6. ยินดีต้อนรับคุณ :)

ดูเหมือนว่าการอ้างอิงบางอย่างจะถูกเก็บไว้ในโฟลเดอร์เหล่านี้เมื่อเพิ่มบริการทำให้เกิดข้อผิดพลาดระหว่างการสร้างรหัสโดยอัตโนมัติ

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