ฉันกำลังพยายามรวบรวม excel addin ของฉันโดยใช้ C # 4.0 และเริ่มได้รับปัญหานี้เมื่อสร้างโครงการของฉันใน Visual Studio เป็นสิ่งสำคัญที่จะบอกคุณว่าฉันไม่เคยมีปัญหานี้มาก่อน อะไรจะทำให้สิ่งนี้เกิดขึ้น
ฉันกำลังพยายามรวบรวม excel addin ของฉันโดยใช้ C # 4.0 และเริ่มได้รับปัญหานี้เมื่อสร้างโครงการของฉันใน Visual Studio เป็นสิ่งสำคัญที่จะบอกคุณว่าฉันไม่เคยมีปัญหานี้มาก่อน อะไรจะทำให้สิ่งนี้เกิดขึ้น
คำตอบ:
ฉันเดาว่าคุณไม่ได้ทำงานกับชุดประกอบที่มีชื่อมาก ฉันมีข้อผิดพลาดนี้เมื่อโครงการสองโครงการอ้างอิงแอสเซมบลีรุ่นเดียวกันที่ต่างกันเล็กน้อยและโครงการที่อ้างอิงโครงการเหล่านี้มากขึ้น ความละเอียดในกรณีของฉันคือการลบข้อมูลคีย์และเวอร์ชันออกจากชื่อชุดประกอบในไฟล์. csproj (ไม่สำคัญเลย) จากนั้นทำการสร้างใหม่ทั้งหมด
การเปลี่ยนแปลงระหว่างแอสเซมบลีเวอร์ชันต่าง ๆ นั้นเข้ากันได้กับส่วนต่าง ๆ ของโซลูชันที่อ้างอิงถึงพวกเขา หากนี่ไม่ใช่กรณีของคุณคุณอาจต้องทำงานเพิ่มเติมเพื่อแก้ไขปัญหา
ด้วย NuGet มันง่ายที่จะเข้าสู่สถานการณ์นี้ถ้า:
ผลลัพธ์นี้ในสองโครงการในโซลูชันของคุณที่อ้างอิงรุ่นที่แตกต่างกันของชุดประกอบของแพ็คเกจนั้น หากหนึ่งในนั้นอ้างอิงถึงอีกแอปหนึ่งและเป็นแอป ClickOnce คุณจะเห็นปัญหานี้
ในการแก้ไขปัญหานี้ให้ออกupdate-package [package name]
คำสั่งที่คอนโซลผู้จัดการแพคเกจ Nuget เพื่อนำทุกอย่างมาสู่สนามเล่นระดับซึ่งปัญหาจะหายไป
คุณควรจัดการแพคเกจ NuGet ในระดับโซลูชันแทนที่จะอยู่ในระดับโครงการเว้นแต่จะมีเหตุผลที่ไม่ควรทำ การจัดการแพ็คเกจระดับโซลูชันหลีกเลี่ยงความเป็นไปได้ของการพึ่งพาหลายเวอร์ชัน เมื่อใช้ UI การจัดการหากแท็บรวมแสดงแพคเกจ 1 แพคเกจขึ้นไปมีหลายเวอร์ชันให้ลองรวมเข้ากับหนึ่งแพ็คเกจ
เมื่อฉันมีปัญหานี้ฉันแก้ไขได้โดยปิด 'เปิดใช้งานการตั้งค่าความปลอดภัย ClickOnce'
เมนู: โครงการ | 'ชื่อโครงการ' คุณสมบัติ ... | แท็บความปลอดภัย | ช่องทำเครื่องหมาย 'เปิดใช้งานการตั้งค่าความปลอดภัย ClickOnce'
ดูคำตอบนี้
ไปที่หน้าเผยแพร่และคลิกที่ "Application Files" จากนั้นคุณจะเห็นรายการ DLL ของคุณ ตรวจสอบให้แน่ใจว่าสถานะที่แจ้งปัญหาของคุณมีสถานะการเผยแพร่เป็น "รวม" แทนที่จะเป็น "สิ่งที่จำเป็นต้องมี"
ฉันมีปัญหานี้ มันเกิดขึ้นเพราะฉันมีหลายโครงการที่ชี้ไปที่แอสเซมบลีเดียวกัน แต่มาจากรุ่นที่แตกต่างกัน ฉันแก้ปัญหาได้โดยเลือกเวอร์ชันเดียวกันกับโครงการทั้งหมดในโซลูชันของฉัน
หากคุณเปลี่ยนเวอร์ชั่นชุดประกอบหรือคัดลอกเวอร์ชันอื่นของไลบรารี่ที่มีการจัดการซึ่งระบุไว้ในข้อผิดพลาดคุณอาจเคยรวบรวมไฟล์ที่อ้างถึงเวอร์ชันผิด 'สร้างใหม่ทั้งหมด' (หรือลบโฟลเดอร์ 'bin และ' obj 'ตามที่กล่าวไว้ในความคิดเห็นก่อนหน้านี้) ควรแก้ไขกรณีนี้
คุณต้องเซ็นชื่อชุดประกอบด้วยกุญแจ ไปในคุณสมบัติโครงการภายใต้การเซ็นชื่อแท็บ:
การเพิ่มโซลูชันของฉันสำหรับปัญหานี้สำหรับทุกคนที่อาจช่วยได้
ฉันมีวิธี ClickOnce ส่งข้อผิดพลาดนี้ แอปพลิเคอ้างอิงทั่วไป "Libs โฟลเดอร์" Foo.dll
และมีการอ้างอิงโครงการไปยัง ในขณะที่ไม่มีโครงการใดในโซลูชันที่อ้างถึงสำเนาแบบคงที่ของFoo.dll
ในโฟลเดอร์ "Libs" การอ้างอิงบางส่วนในโฟลเดอร์นั้นทำได้ (เช่น: โซลูชันของฉันอ้างอิงLibs\Bar.dll
ที่อ้างอิงFoo.dll
) เนื่องจากแอป CO ดึงการอ้างอิงทั้งหมดจากLibs
เช่นเดียวกับการอ้างอิงของพวกเขาทั้งสองฉบับกำลังเข้าสู่โครงการ นี่กำลังสร้างข้อผิดพลาดด้านบน
ฉันแก้ไขปัญหาโดยการย้ายLibs\Foo.dll
รุ่นคงที่ของฉันไปยังโฟลเดอร์ย่อย, Libs\Fix\Foo.dll
. การเปลี่ยนแปลงนี้ทำให้แอป ClickOnce ใช้เฉพาะเวอร์ชันโครงการของ DLL และข้อผิดพลาดหายไป
การลบ DLL (ซึ่งมีข้อผิดพลาดเกิดขึ้น) และการสร้างโซลูชันขึ้นใหม่แก้ไขปัญหาของฉันได้ ขอบคุณ
หากคุณลองคำตอบอื่น ๆ ทั้งหมดในคำถามนี้และคุณ:
... คุณอาจมี NuGet แพ็คเกจ DLL รุ่นแยกต่างหากในการอ้างอิงโครงการของคุณเนื่องจากการอ้างอิงที่สร้างโดย Intellisense / ReSharper จะเป็นการอ้างอิง "ปกติ" ไม่ใช่การอ้างอิง NuGet ตามที่คาดไว้ดังนั้นกระบวนการอัปเดตของ NuGet จะชนะ ' หาหรืออัปเดต!
ในการแก้ไขปัญหานี้ให้ลบการอ้างอิงในโครงการ A จากนั้นใช้ NuGet เพื่อติดตั้งและตรวจสอบให้แน่ใจว่าแพ็คเกจ NuGet ในโครงการทั้งหมดเป็นรุ่นเดียวกัน (ตามที่อธิบายในคำตอบนี้ )
ปัญหานี้อาจเกิดขึ้นเมื่อใดก็ตามที่ ReSharper / Intellisense แนะนำให้เพิ่มการอ้างอิงไปยังโครงการของคุณ มันสามารถโน้มน้าวใจได้ลึกกว่าตัวอย่างด้านบนด้วยโครงการที่ผสมผสานกันหลายอย่างและการพึ่งพาทำให้ยากต่อการติดตาม หากการอ้างอิงที่แนะนำโดย ReSharper / Intellisense นั้นมาจากแพ็คเกจ NuGet ให้ใช้ NuGet เพื่อติดตั้ง
เมื่อสิ่งนี้เกิดขึ้นกับฉันด้วย WindowsAPICodePack หลังจากฉันอัปเดตฉันเพิ่งสร้างโซลูชันขึ้นมาใหม่
สร้าง -> สร้างโซลูชันใหม่
มีหลายโครงการในโซลูชันของฉันที่ต้องผ่านและอัปเดตเป็นรายบุคคลดังนั้นฉันจึงแก้ไขปัญหานี้โดย:
การยกเลิกการโหลดและโหลดซ้ำปัญหาโครงการแก้ไขให้ฉัน
ฉันไปเผยแพร่ไฟล์แอปพลิเคชันพบ dll ที่โยนข้อผิดพลาดเปลี่ยนเป็น'รวม'จาก 'รวม (อัตโนมัติ)' ตอนนี้ฉันสามารถเผยแพร่
ฉันพบปัญหานี้หลังจากย้าย Excel Addin จาก packages.config ไปยัง PackageReference ดูเหมือนว่าจะเกี่ยวข้องกับปัญหานี้
การทำงานต่อไปนี้เป็นวิธีแก้ปัญหาแบบหยาบหากคุณไม่ได้ใช้ ClickOnce (จะเป็นการละเว้นข้อมูลการพึ่งพาทั้งหมดจาก.manifest
ไฟล์):
ค้นหาส่วนที่มีลักษณะเช่นนี้:
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
แก้ไขสำเนาที่เปลี่ยนชื่อของ.targets
ไฟล์ที่อ้างอิง(ในกรณีของฉันไฟล์ถูกแก้ไขC:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
และฉันทำสำเนาMicrosoft.VisualStudio.Tools.Office_FIX.targets
ในโฟลเดอร์เดียวกัน - ไม่ได้ตรวจสอบว่ามันทำงานได้จากโฟลเดอร์อื่นหรือไม่)
ค้นหาGenerateApplicationManifest
องค์ประกอบและเปลี่ยนแอตทริบิวต์การDependencies="@(DependenciesForGam)"
Dependencies=""
เปลี่ยนส่วนที่พบใน 2. เพื่ออ้างอิง.targets
ไฟล์ที่แก้ไขของคุณแทน
จะต้องทำซ้ำทุกครั้งที่.targets
มีการอัปเดตไฟล์ที่จัดส่งด้วย VS (หรือคุณจะไม่ได้รับการอัปเดต) แต่ฉันหวังว่าจะได้รับการแก้ไขในไม่ช้า ...
ชุดประกอบของคุณได้รับการลงนามอย่างถูกต้องหรือไม่?
ในการตรวจสอบนี้ให้กด Alt + Enter ในโครงการของคุณ (หรือคลิกขวาจากนั้นคลิกคุณสมบัติ) ไปที่ "การลงชื่อ" ตรวจสอบว่ากล่องกา "เข้าสู่ระบบการชุมนุม" มีการตรวจสอบและแฟ้มชื่อคีย์ที่แข็งแกร่งจะถูกเลือกและ "เข้าสู่ระบบหน่วงเวลาเท่านั้น" คือไม่ได้ตรวจสอบ
ตอนนี้ต่อไปนี้เป็นแนวทางที่แตกต่างสำหรับปัญหา:
คลิกขวาที่โครงการและเลือกตัวเลือก 'ยกเลิกการโหลดโครงการ' คุณจะสังเกตเห็นว่าโครงการของคุณไม่พร้อมใช้งาน
คลิกขวาที่โครงการไม่พร้อมใช้งานและเลือกตัวเลือก 'แก้ไข'
เลื่อนลงไปที่แท็ก '<ItemGroup>' ที่มีแท็กทรัพยากรทั้งหมด
ตอนนี้ไปอ้างอิงที่แสดงในรายการข้อผิดพลาดคุณจะสังเกตเห็นว่ามันใช้แท็กเดียว (เช่น< Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >
)
เปลี่ยนเป็นลักษณะดังนี้:
.
<Reference Include="assemble_name_here, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
< Private > True < / Private >
< HintPath > path_here\assemble_name_here.dll < / HintPath >
< / Reference >
สิ่งนี้เกิดขึ้นเมื่อคุณเปลี่ยนรุ่นของ. dll ที่อ้างอิง คุณต้องลบรายการทั้งหมดหรือ. dll ในโฟลเดอร์ build เป้าหมาย
ฉันได้รับข้อผิดพลาดของคอมไพเลอร์ที่คล้ายกัน เมื่อฉันเพิ่มโครงการที่อ้างถึงของไฟล์ dll เพื่อแก้ไขปัญหาได้รับการแก้ไข
หากโครงการหลักของคุณใช้บางโครงการห้องสมุดและมีการอ้างอิงถึงพวกเขาคุณสามารถทำให้เกิดปัญหานี้หากโครงการของคุณอ้างอิงถึงไฟล์ dll แอสเซมบลีแทนโครงการห้องสมุดเมื่อคุณเปลี่ยนบางสิ่งบางอย่างในโครงการห้องสมุดของคุณ (เช่น: เปลี่ยนชื่อชั้น)
คุณสามารถตรวจสอบการอ้างอิงทั้งหมดไปยังโครงการหลักของคุณโดยดูในหน้าต่าง Object Browser (เมนู View-> Object Browser) การอ้างอิงถึงไฟล์ dll จะมีหมายเลขเวอร์ชันเสมอ ตัวอย่าง: TestLib [1.0.0.0]
การแก้ไข: ลบการอ้างอิงปัจจุบันของโครงการหลักของคุณไปยังโครงการห้องสมุดและเพิ่มการอ้างอิงถึงโครงการห้องสมุดนั้นอีกครั้ง
หลังจากลองใช้วิธีแก้ปัญหาส่วนใหญ่ที่นี่ในที่สุดฉันเพิ่งเพิ่มการอ้างอิงไปยังโครงการจากการคลิกครั้งเดียวโครงการนี้เปลี่ยนเป็นรวม (อัตโนมัติ) จากรวมและในที่สุดก็ใช้งานได้
สิ่งที่ช่วยฉันคือฉันไปที่ Package Manager Solution และดูแพ็คเกจที่ติดตั้งซึ่งก่อให้เกิดปัญหา ฉันเห็นว่าหลายโครงการอ้างอิงแพคเกจเดียวกัน แต่มีเวอร์ชั่นต่างกัน ฉันจัดเรียงพวกเขาตามความต้องการของฉันและใช้งานได้
ฉันมีสิ่งนี้ในโซลูชันที่มี 6 โครงการ หนึ่งในโครงการของฉันอ้างถึงชุดประกอบที่มีชื่อเป็นการอ้างอิงไฟล์ คนอื่น ๆ ล้วนชี้ไปที่การอ้างอิงโครงการ
ฉันมักจะได้รับข้อผิดพลาดที่แตกต่างกันในกรณีเหล่านี้
ทางออกของฉันคือการลบการชุมนุมที่มีชื่อทุกที่มันถูกอ้างอิงและเพิ่มกลับ เมื่อฉันทำงานผ่านโครงการปัญหาก็หายไป ก่อนที่จะทำสิ่งนี้ฉันพยายามทำความสะอาดโซลูชันรวมทั้งตรวจสอบให้แน่ใจว่าไม่มีการเซ็นชื่อโครงการใด ๆ
หวังว่าจะช่วยใครบางคน ...
หากไม่สอดคล้องกับการขึ้นต่อกันของมันให้ไปที่ตัวจัดการแพคเกจ NuGet ที่ระดับโซลูชันและตรวจสอบแท็บอัปเดตและรวมแท็บประสานกันทั้งหมด
ฉันเพิ่งพบปัญหานี้ ในกรณีของฉันฉันมีแพ็คเกจ NuGet ในชุดประกอบที่แตกต่างกัน สิ่งที่ฉันมีคือแพ็คเกจ NuGet รุ่นเดียวกันหลายรุ่นที่เชื่อมโยงกับชุดประกอบของฉันเอง
โซลูชันของฉันคือใช้ผู้จัดการแพคเกจ NuGet ตามแนวทางแก้ไขตรงข้ามกับแต่ละโครงการ สิ่งนี้เปิดใช้งานตัวเลือก "การรวม" ซึ่งคุณสามารถอัพเกรดแพ็คเกจ NuGet ของคุณในโครงการได้มากเท่าที่คุณต้องการ - ดังนั้นพวกเขาจึงอ้างอิงรุ่นแอสเซมบลีเดียวกันทั้งหมด เมื่อฉันรวมงบล้มเหลวในการสร้างหายไป
ฉันยังชนชนิดของปัญหาทั้งหมดที่ฉันเพิ่งมีการทำคือการลบ .dll (สามารถพบได้ในการอ้างอิง) ที่ก่อให้เกิดข้อผิดพลาดและเพิ่มอีกครั้ง
ทำงานเหมือนจับใจ
ลองกับแพคเกจอัพเดท - ติดตั้ง - ขึ้นอยู่กับการพึ่งพา
เพียงไปที่ Publish -> Application File -> และเปลี่ยนสถานะการเผยแพร่ dll ที่ได้รับผลกระทบจากสิ่งที่จำเป็นต้องมีเพื่อรวม! สิ่งนี้ได้ผลสำหรับฉัน!
bin
และobj
โฟลเดอร์ของโครงการและสร้างโครงการอีกครั้ง บางครั้งก็ใช้งานได้