“ ไม่พบใบรับรองการลงนามอย่างชัดแจ้งในที่เก็บใบรับรอง” - แม้เมื่อเพิ่มคีย์ใหม่


153

ฉันไม่สามารถสร้างโครงการที่มีการเซ็นชื่อคีย์ที่แข็งแกร่ง - ข้อความในชื่อเรื่องจะปรากฏขึ้นเสมอ

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

ฉันได้ลองใช้งาน Visual Studio ในฐานะผู้ดูแลระบบแล้วและพยายามเพิ่มปุ่มลงใน Windows Certificate Store ด้วยตนเอง

ช่วยด้วย!

แก้ไข: ฉันไม่ได้รับข้อผิดพลาดนี้กับโครงการใหม่ แต่ฉันอยากจะให้โครงการที่มีอยู่นี้ทำงานได้ มันจะไม่ทำงานแม้ว่าฉันจะสร้างใบรับรองใหม่!


3
โครงการ VS ประเภทใด คุณได้ยกเลิกการเลือก "เซ็นชื่อ ClickOnce" ในแท็บการเซ็นชื่อคุณสมบัติของโครงการด้วยหรือไม่
Simon Mourier

@Simon Mourier หากฉันไม่เลือกตัวเลือกนั้นไฟล์จะไม่ถูกลงชื่อ ฉันต้องการให้ลงชื่อ! มันเป็นโครงการ C # ทำงานได้ดีบนเครื่องพัฒนาหลักของฉันไม่ใช่ในแล็ปท็อป
มาร์คัส

ข้อความแสดงข้อผิดพลาดปรากฏขึ้นในบันทึกการทำงานของคุณหรือไม่? มันอาจช่วยถ้าคุณคัดลอกและวางบันทึก
Owen Wengerd

ข้อผิดพลาดในบันทึกการทำงาน:“ ไม่พบใบรับรองการลงชื่ออย่างชัดแจ้งในที่จัดเก็บใบรับรอง”
Marcus

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

คำตอบ:


234

ในที่สุดฉันก็ได้พบวิธีแก้ปัญหาและหวังว่าสิ่งนี้จะช่วยคนอื่นด้วย

  1. แก้ไข .csprojไฟล์สำหรับโครงการที่เป็นปัญหา
  2. ลบบรรทัดของรหัสต่อไปนี้:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    

1
ทำงานให้ฉันด้วย คำเตือนใด ๆ ของการกระทำดังกล่าว?
หมอ Coder

1
Yup ลบอะไรด้วย "Manifest" และใช้งานได้ :-)
s1cart3r

2
ฉันจะไม่ทำสิ่งนี้โดยไม่ทราบผลกระทบ ... ทำมันต่อไป
barnacle.m

ในกรณีของฉันการลบManifestCertificateThumbprintและManifestKeyFileแก้ปัญหา
อาเหม็ดชาเมล

ทำงานให้ฉัน ไม่มีเงื่อนงำอะไรที่สะท้อนกลับมา แต่อย่างน้อยหนึ่งในนั้นเป็นโครงการที่ทำงานได้ดีพอสำหรับฉัน
Parrotmaster

148

ไปที่ "คุณสมบัติ" ของโครงการภายใน visual studio จากนั้นไปที่แท็บเซ็นชื่อ

จากนั้นตรวจสอบให้แน่ใจว่าได้ลงชื่อในคลิกเมื่อรายการนั้นถูกปิด


คำแนะนำการอัปเดต:

ภายใน Explorer โซลูชันของคุณ:

  1. คลิกขวาที่โครงการของคุณ
  2. คลิกที่คุณสมบัติ
  3. โดยปกติทางด้านซ้ายให้เลือกแท็บ "การลงชื่อ"
  4. ตรวจสอบการลงชื่อเข้าใช้ ClickOnce
  5. ให้แน่ใจว่าคุณประหยัด!

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


2
สิ่งที่คุณพูดนั้นใช้ได้และไม่ได้ผล ในที่สุดฉันต้องลบบรรทัดของรหัสตามที่ระบุไว้ในคำตอบด้านล่าง
Hamid Shahid

1
สิ่งนี้ทำอะไร / การกระทำนี้หมายถึงอะไร?
LazerSharks

@TrailMix มันจะแก้ไขไฟล์ config ของคุณอย่างเหมาะสม
ADL

1
นี้ให้ฉันทางออกสำหรับ vs2010 :) ขึ้น!
jace

1
คำตอบที่ดี! ฉันใช้ VS2012 และใช้งานได้จริง! +1
kiLLua

15

ง่ายมาก !!

ฉันแก้ไขปัญหานี้โดยทำตามขั้นตอนนี้:

  1. เปิดคุณสมบัติของโครงการ img
  2. คลิกที่แท็บการลงชื่อ
  3. และยกเลิกการเลือก "ลงชื่อการชุมนุม"

แค่นั้นแหละ!!


13
  1. เปิดไฟล์. csproj ในแผ่นจดบันทึก
  2. ลบข้อมูลต่อไปนี้ที่เกี่ยวข้องกับการลงนามใบรับรองในที่เก็บใบรับรอง

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    

11

ลองนี้: คลิกขวาในโครงการของคุณ -> ไปที่คุณสมบัติ -> คลิกลงนามซึ่งเป็นด้านซ้ายของหน้าจอ -> ยกเลิกการเลือกเข้าสู่ระบบคลิกหนึ่งครั้งปรากฏ -> บันทึกและรูปร่าง


6

ไปที่โครงการ "คุณสมบัติ" ภายในสตูดิโอภาพ จากนั้นไปที่แท็บเซ็นชื่อ

จากนั้นตรวจสอบให้แน่ใจว่าได้ลงชื่อในคลิกเมื่อรายการนั้นถูกปิด

หรือ

1. เปิดไฟล์. csproj ใน Notepad

2. ลบข้อมูลต่อไปนี้ที่เกี่ยวข้องกับการลงนามใบรับรองในที่เก็บใบรับรอง xxxxx xxxxxx xxxxxxxx.pfx จริงเท็จ `

ทำงานให้ฉัน


3

สมมติว่านี่เป็นใบรับรองส่วนบุคคลที่สร้างขึ้นโดย windows บนระบบที่คุณคัดลอกโครงการของคุณคุณสามารถใช้ตัวจัดการใบรับรองในระบบที่โครงการอยู่ในขณะนี้และนำเข้าใบรับรอง เริ่มตัวจัดการใบรับรอง (certmgr) และเลือกใบรับรองส่วนบุคคลจากนั้นคลิกขวาที่ด้านล่างรายการใบรับรองที่มีอยู่และเลือกนำเข้าจากงาน ใช้การสืบค้นเพื่อค้นหา. pfx ในโครงการ (.pfx จากระบบก่อนหน้านี้ที่คุณคัดลอกมาพร้อมกับโครงการ) มันควรจะอยู่ในไดเรกทอรีย่อยที่มีชื่อเดียวกับไดเรกทอรีโครงการ ฉันคุ้นเคยกับ C # และ VS ดังนั้นหากนั่นไม่ใช่สภาพแวดล้อมของคุณบางที. pfx จะอยู่ที่อื่นหรืออาจไม่สามารถใช้คำแนะนำนี้ได้ หลังจากการนำเข้าคุณควรได้รับข้อความสถานะ หากคุณประสบความสำเร็จข้อผิดพลาดใบรับรองการคอมไพล์ควรหายไปหน้าจอ certmgr


ชัดเจนและรัดกุม!
Guido Leenders

0

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


ขอบคุณ แต่ลองมาแล้ว Visual Studio ควรเพิ่มใบรับรองโดยอัตโนมัติเมื่อคุณสร้างใหม่ อย่างไรก็ตามฉันได้ลองเพิ่มไฟล์. pfx ด้วยตนเองเช่นกัน หน้าต่างด้านซ้ายเพื่อติดตั้งในที่เก็บใบรับรองที่ถูกต้องและเพิ่มเข้าไปในร้านค้าส่วนตัวของฉัน
มาร์คัส

คีย์ส่วนตัวไม่ได้ถูกจัดเก็บไว้ในที่เก็บใบรับรอง โปรดอ่านบทความนี้อาจจะช่วยให้คุณเข้าใจความแตกต่าง: technet.microsoft.com/en-us/library/cc962112.aspx
โอเว่น Wengerd

ฉันควรเพิ่มว่าคุณสามารถตรวจสอบว่าคีย์ส่วนตัวที่เกี่ยวข้องนั้นพร้อมใช้งานโดยการเปิดหน้าต่างคุณสมบัติใบรับรองในตัวจัดการใบรับรอง หากมีรหัสส่วนตัวข้อความต่อไปนี้จะปรากฏที่ด้านล่างของหน้าทั่วไป: "คุณมีรหัสส่วนตัวที่สอดคล้องกับใบรับรองนี้" หากคุณไม่เห็นข้อความนั้นจะไม่ติดตั้งคีย์ส่วนตัว
Owen Wengerd

ใช่มันจะพูดว่า "คุณมีคีย์ส่วนตัวที่สอดคล้องกับใบรับรองนี้"
มาร์คัส

ฉันคิดว่าออกกฎสำคัญหรือใบรับรองเป็นปัญหา
Owen Wengerd

0

คุณบอกว่าคุณคัดลอกไฟล์จากคอมพิวเตอร์เครื่องอื่น หลังจากที่คุณคัดลอกพวกคุณคุณ 'ยกเลิกการปิดกั้น' พวกเขา? ควรตรวจสอบไฟล์. snk โดยเฉพาะเพื่อให้แน่ใจว่าไม่ได้ทำเครื่องหมายว่าไม่ปลอดภัย


มันไม่ได้ถูกบล็อคมันมาจากซอฟต์แวร์การซิงค์ Windows Live Mesh อย่างไรก็ตามมันไม่เกี่ยวข้องเลยแม้แต่การสร้างรหัสใหม่ภายใน Visual Studio บนแล็ปท็อปจะไม่ทำงาน
มาร์คัส

0

เมื่อต้องการเซ็นชื่อชุดประกอบด้วยชื่อที่รัดกุมโดยใช้แอตทริบิวต์

เปิดAssemblyInfo.cs(ใน$(SolutionDir)\Properties )

AssemblyKeyFileAttributeหรือAssemblyKeyNameAttributeระบุชื่อของไฟล์หรือภาชนะที่มีคู่สำคัญในการใช้งานเมื่อลงนามในการชุมนุมที่มีชื่อที่แข็งแกร่ง

เพิ่มรหัสต่อไปนี้:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]

การเพิ่มบรรทัดนี้ไม่ได้สร้างความแตกต่างฉันยังคงได้รับข้อผิดพลาดเดียวกัน
มาร์คัส

0

หากคุณต้องการเพียงแค่สร้างโครงการหรือโซลูชันในพื้นที่การลบการลงชื่ออาจเป็นวิธีการที่ง่าย ๆ

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

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

สิ่งที่คุณต้องทำก็แค่ติดตั้งใบรับรองนี้ภายใต้บัญชีที่เหมาะสมบนเซิร์ฟเวอร์บิลด์ของคุณ

  1. ดาวน์โหลดPsExec จาก Windows Sysinternals

  2. เปิดพรอมต์คำสั่งและป้อนคำสั่งต่อไปนี้ มันจะวางไข่พรอมต์คำสั่งใหม่ซึ่งทำงานเป็นระบบภายในเครื่อง (สมมติว่า TeamCity ของคุณกำลังทำงานภายใต้บัญชี Local System เริ่มต้น):

    > psexec.exe -i -s cmd.exe

  3. ในพรอมต์คำสั่งใหม่นี้เปลี่ยนเป็นไดเรกทอรีที่มีใบรับรองและป้อนชื่อไฟล์ที่จะติดตั้ง (เปลี่ยนชื่อไฟล์เป็นของคุณ):

    > mykey.pfx

  4. ตัวช่วยสร้างใบรับรองการนำเข้าจะเริ่มขึ้น คลิกผ่านและเลือกค่าเริ่มต้นที่แนะนำทั้งหมด

  5. เรียกใช้งานบิลด์

เครดิตทั้งหมดไปที่Stuart Noble (และต่อจากนั้นไปที่Laurent Kempéฉันเชื่อว่า☺)

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