Tại sao tôi nhận được "Hội" * phải "phải được ký mạnh mẽ để được đánh dấu là điều kiện tiên quyết."?


266

Tôi đang cố gắng biên dịch addin excel của mình bằng C # 4.0 và bắt đầu gặp vấn đề này khi xây dựng dự án của mình trong Visual Studio. Điều quan trọng là nói với bạn rằng tôi chưa gặp vấn đề này trước đây. Điều gì có thể gây ra điều này xảy ra?


72
Hãy thử nhanh, xóa cả thư mục binobjthư mục của dự án của bạn và xây dựng lại dự án. Đôi khi điều này hoạt động.
Jason Evans

bạn đang ký hợp đồng?
Felice Pollano

3
@Jason, Làm sạch dự án và xây dựng lại làm việc cho tôi. Gần đây tôi đã ký các hội đồng và dự án sẽ xây dựng, nhưng sẽ không xuất bản.
Kratz

1
@Kratz - Rất vui vì mẹo này hiệu quả với bạn :) Nó giống như sửa máy tính của bạn bằng cách khởi động lại nó!
Jason Evans

Điều này xảy ra với tôi khi trình quản lý cấu hình đặt lại cài đặt bản dựng cho một số dự án của tôi (nghĩa là chúng không được đặt để xây dựng trên "Rebuild All"), sau khi phiên bản các dự án đó và xây dựng lại lỗi sẽ xảy ra.
alan

Câu trả lời:


239

Tôi đoán là bạn không làm việc với các hội đồng được đặt tên mạnh mẽ. Tôi đã gặp lỗi này khi hai dự án tham chiếu các phiên bản hơi khác nhau của cùng một tổ hợp và một dự án phụ thuộc hơn tham chiếu các dự án này. Độ phân giải trong trường hợp của tôi là xóa thông tin khóa và phiên bản khỏi tên tập hợp trong các tệp .csproj (dù sao nó cũng không quan trọng), và sau đó thực hiện một bản dựng sạch.

Các thay đổi giữa các phiên bản lắp ráp khác nhau tương thích với các phần của giải pháp đề cập đến chúng. Nếu đây không phải là trường hợp của bạn, bạn có thể phải thực hiện thêm một số công việc để giải quyết vấn đề.

NuGet

Với NuGet, thật dễ dàng để vào tình huống này nếu:

  1. Bạn cài đặt một gói cho một dự án trong giải pháp của bạn.
  2. Một phiên bản mới của gói đó được triển khai vào nguồn gói.
  3. Bạn cài đặt nó cho một dự án khác trong cùng một giải pháp.

Điều này dẫn đến hai dự án trong giải pháp của bạn tham chiếu các phiên bản khác nhau của các gói đó. Nếu một trong số họ tham chiếu cái khác và là ứng dụng ClickOnce, bạn sẽ thấy vấn đề này.

Để khắc phục điều này, hãy đưa ra update-package [package name]lệnh tại Bảng điều khiển Trình quản lý gói Nuget để đưa mọi thứ lên một sân chơi bình đẳng, tại thời điểm đó, sự cố sẽ biến mất.

Bạn nên quản lý các gói NuGet ở cấp độ giải pháp thay vì ở cấp dự án trừ khi có lý do thuyết phục không. Quản lý gói cấp độ giải pháp tránh tiềm năng của nhiều phiên bản phụ thuộc. Khi sử dụng UI quản lý, nếu tab Hợp nhất hiển thị 1 hoặc nhiều gói có nhiều phiên bản, hãy xem xét hợp nhất chúng thành một.


7
Dưới đây là một số thông tin khác: social.msdn.microsoft.com/Forums/en/csharpl Language / thread / . Ngoài ra, xóa binobj và (nếu trong điều khiển của bạn) đặt phiên bản lắp ráp thành cùng một giá trị (ví dụ: để lại số bản dựng bằng 0) sẽ giúp ích.
Bộ

3
Tôi đã giải quyết một chút vào cuối câu trả lời của bạn để phản ánh trải nghiệm của riêng tôi hôm nay với NuGet và lỗi tương tự này. Hy vọng nó sẽ giúp được ai đó vào lúc nào đó (thậm chí có thể là chính tôi trong một vài tháng nữa!).
Neil Barnwell

2
Lỗi này liên tục xuất hiện cho tôi và xóa tên lắp ráp khỏi tệp .csproj, sau đó việc dọn dẹp đã liên tục sửa lỗi cho tôi. Cảm ơn!
ScubaSteve

1
Bạn có thể muốn xem câu trả lời này nếu câu trả lời trên không hoạt động và bạn nghĩ rằng bạn đã thêm tham chiếu NuGet vào một trong các dự án của bạn bằng Intellisense / ReSharper.
David Murdoch

Giải pháp chứa 4 dự án. Một dự án B là thư viện lớp. Dll của B đã được tham chiếu trong phần còn lại của ba. Hai dự án khác ( CD ) thực thi đang được tham chiếu trong Một . Vì vậy, tôi xây dựng A và có vấn đề rất giống nhau. Việc khắc phục là xây dựng lại phần còn lại của hai dự án trước. Và sau đó xây dựng lại dự án Một vấn đề cố định.
Vikram Singh Saini

268

Khi gặp sự cố này, tôi đã khắc phục bằng cách tắt 'Bật cài đặt bảo mật ClickOnce'.

Menu: Dự án | 'Tên dự án' Thuộc tính ... | Tab bảo mật | Hộp kiểm 'Kích hoạt cài đặt bảo mật ClickOnce'.


2
Không hoạt động với tôi trong VS2012 (hộp kiểm được kiểm tra lại tự động trong khi xuất bản). Tôi đã sử dụng câu trả lời này thay vào đó, vì DLL chỉ cần cho quá trình xây dựng. stackoverflow.com/a/8123074/17713
Matthias Meid

3
Khi sử dụng ClickOnce, hộp kiểm này được chọn tự động mỗi khi ứng dụng được xuất bản với Trình hướng dẫn xuất bản. Xem msdn.microsoft.com/en-us/l Library / 1sfbfyk0.aspx để biết thêm thông tin.
David Murdoch

8
Tôi có MSVS 2015 và tôi không thấy tab bảo mật trong thuộc tính dự án
zeta

70

Xem câu trả lời này .

Chuyển đến trang xuất bản và nhấp vào "Tệp ứng dụng". Từ đó bạn sẽ thấy một danh sách các DLL của bạn. Đảm bảo rằng những người gây rắc rối cho bạn có Trạng thái xuất bản được đánh dấu là "Bao gồm" thay vì "Điều kiện tiên quyết".


2
Dự án addin exel không có nút Tệp ứng dụng. stackoverflow.com/questions/6378801/ Hy
Sergey Kucher

@SergeyKucher: Tôi không biết điều đó. Cảm ơn các cập nhật. Vì câu hỏi của bạn không chính xác đối với một addin Excel, tôi nghĩ rằng câu trả lời của tôi vẫn còn hiệu lực ở đây (tôi có cùng thông báo lỗi trong dự án winforms và đã giải quyết theo cách này).
Otiel

Tôi có một dự án winforms được xây dựng tốt cho đến khi tôi sử dụng trình hướng dẫn xuất bản mà sau đó tôi đã gặp lỗi của OP. Thay đổi trạng thái xuất bản đã khắc phục sự cố. Cảm ơn
Kristian

7
Trong trường hợp của tôi, vấn đề này đã được giải quyết khi thay đổi Trạng thái xuất bản từ INCLUDE (tự động) thành INCLUDE. Dù sao, câu trả lời của bạn đã giúp không đẩy các giá trị được hiển thị. Cảm ơn rất nhiều
Julio Nobre

22

Tôi đã có vấn đề này. Nó xảy ra bởi vì tôi có nhiều dự án chỉ vào cùng một hội đồng nhưng từ các phiên bản khác nhau. Tôi giải quyết nó chọn cùng một phiên bản cho tất cả các dự án trong giải pháp của tôi.


13

Nếu bạn đã thay đổi phiên bản lắp ráp của mình hoặc sao chép một phiên bản khác của thư viện được quản lý được nêu trong lỗi, bạn cũng có thể đã biên dịch các tệp tham chiếu phiên bản sai trước đó. Một 'Xây dựng lại tất cả' (hoặc xóa các thư mục 'bin và' obj 'của bạn như đã đề cập trong một nhận xét trước đó) sẽ khắc phục trường hợp này.


1
Hoặc chỉ cần 'sạch Giải pháp'
Unsliced

Một 'Rebuild All' thực hiện sạch trước và tương đương với 'sạch' sau đó 'xây dựng'. Tuy nhiên, cần lưu ý là đôi khi khi các tệp được sao chép hoặc sao chép thủ công với các dấu thời gian khác nhau, chức năng 'sạch' / 'xây dựng lại' không khắc phục được sự cố và cần phải xóa thủ công các thư mục 'bin' và 'obj'.
Sogger

Đối với vấn đề này liên quan đến Excel, việc xóa các thư mục bin / obj hoạt động với tôi, các cách tiếp cận khác thì không.
William Melani 4/2/2015

6

bạn cần ký tên vào hội đồng với một phím. Đi vào thuộc tính dự án dưới ký tab: nhập mô tả hình ảnh ở đây


6

Thêm giải pháp của tôi cho vấn đề này cho bất cứ ai nó có thể giúp đỡ.

Tôi đã có một giải pháp ClickOnce ném lỗi này. Ứng dụng đã tham chiếu một thư mục "Libs" chung và chứa tham chiếu dự án đến a Foo.dll. Mặc dù không có dự án nào trong giải pháp tham chiếu bản sao tĩnh của Foo.dllthư mục "Libs", một số tham chiếu trong thư mục đó đã làm (ví dụ: giải pháp của tôi có Libs\Bar.dlltham chiếu đến tham chiếu Foo.dll.) Vì ứng dụng CO đã rút tất cả các phụ thuộc từLibs cũng như sự phụ thuộc của họ, cả hai bản sao đã đi vào dự án. Điều này đã tạo ra lỗi ở trên.

Tôi đã khắc phục sự cố bằng cách chuyển Libs\Foo.dllphiên bản tĩnh của mình sang thư mục con , Libs\Fix\Foo.dll. Thay đổi này làm cho ứng dụng ClickOnce chỉ sử dụng phiên bản dự án của DLL và lỗi đã biến mất.



6

Nếu bạn đã thử tất cả các câu trả lời khác trong câu hỏi này và bạn:

  • Có nhiều dự án trong giải pháp của bạn
  • Có một dự án (Dự án A) tham chiếu dự án khác (Dự án B), dự án có tham chiếu gói NuGet.
  • Trong Dự án A, bạn đã sử dụng Intellisense / ReSharper để mang tham chiếu đến gói NuGet được tham chiếu trong Dự án B (điều này có thể xảy ra khi một phương thức trong Dự án B trả về một loại được cung cấp bởi gói NuGet và phương thức đó được sử dụng trong Dự án A)
  • đã cập nhật gói NuGet thông qua Trình quản lý gói NuGet (hoặc CLI).

... bạn có thể có các phiên bản riêng biệt của gói NuGet DLL trong Tài liệu tham khảo của dự án của bạn, vì tham chiếu được tạo bởi Intellisense / ReSharper sẽ là một tham chiếu "bình thường" và không phải là tham chiếu NuGet như mong đợi, vì vậy quá trình cập nhật NuGet đã thắng ' Tìm hoặc cập nhật nó!

Để khắc phục điều này, hãy xóa tham chiếu trong Dự án A, sau đó sử dụng NuGet để cài đặt nó và đảm bảo các gói NuGet trong tất cả các dự án là cùng một phiên bản. (như giải thích trong câu trả lời này )


Lời khuyên cho cuộc sống:

Vấn đề này có thể xuất hiện bất cứ khi nào ReSharper / Intellisense gợi ý để thêm một tham chiếu cho dự án của bạn. Nó có thể phức tạp sâu sắc hơn nhiều so với ví dụ trên, với nhiều dự án và phụ thuộc đan xen làm cho nó khó theo dõi. Nếu tham chiếu được đề xuất bởi ReSharper / Intellisense thực sự là từ gói NuGet, hãy sử dụng NuGet để cài đặt nó.


Có, tránh sử dụng Resharper để thêm tài liệu tham khảo. Resharper sẽ lấy dll tham chiếu từ thư mục gỡ lỗi (hoặc phát hành nếu bạn đang ở chế độ phát hành). Điều đó sẽ gây ra rất nhiều vấn đề, đặc biệt trong các dự án lớn.
cepriego

5

Khi điều này xảy ra với tôi với WindowsAPICodePack sau khi tôi cập nhật nó, tôi mới xây dựng lại giải pháp.

Xây dựng -> Xây dựng lại giải pháp


4

Có quá nhiều dự án trong giải pháp của tôi phải trải qua và cập nhật riêng lẻ nên tôi đã sửa nó bằng cách:

  • Nhấp chuột phải vào giải pháp của tôi và chọn 'Quản lý gói NuGet cho Giải pháp ...'
  • Chuyển đến tab Cập nhật
  • Tìm gói bị ảnh hưởng và chọn Cập nhật
  • Nhấp vào OK và điều này mang lại tất cả các phiên bản của gói cập nhật

4

Dỡ bỏ và tải lại dự án vấn đề đã giải quyết nó cho tôi.


4

Tôi đã đi xuất bản , các tệp ứng dụng, thấy dll ném lỗi đã thay đổi thành 'Bao gồm' từ 'Bao gồm (Tự động)'. Bây giờ tôi có thể xuất bản.


4

Tôi đã gặp phải vấn đề này sau khi di chuyển một Addin Excel từ gói.config sang PackageReference. Có vẻ như có liên quan đến vấn đề này .

Các cách sau hoạt động như một cách giải quyết khác nếu bạn không sử dụng ClickOnce (nó sẽ bỏ qua tất cả thông tin phụ thuộc từ .manifesttệp):

  1. Dỡ bỏ dự án, chỉnh sửa .csproj
  2. Tìm phần trông như thế này:

    <!-- Include additional build rules for an Office application add-in. -->
    <Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
  3. Chỉnh sửa một bản sao được đổi tên của .targetstệp được tham chiếu (trong trường hợp của tôi, tệp đã được giải quyết C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targetsvà tôi đã tạo một bản sao Microsoft.VisualStudio.Tools.Office_FIX.targetstrong cùng một thư mục - không kiểm tra xem nó có hoạt động từ một thư mục khác không).

  4. Tìm GenerateApplicationManifestphần tử và thay đổi thuộc tính của nó Dependencies="@(DependenciesForGam)"thành Dependencies="".

  5. Thay đổi phần tìm thấy trong 2. để tham chiếu .targetstệp đã chỉnh sửa của bạn thay vào đó.

Điều này sẽ phải được lặp lại bất cứ khi nào phiên bản của .targetstệp được gửi cùng với VS được cập nhật (hoặc bạn sẽ không nhận được các bản cập nhật), nhưng tôi hy vọng nó sẽ được khắc phục sớm ...


2
Để thêm vào điều này, một cách khắc phục vấn đề nhẹ nhàng hơn là sao chép toàn bộ phần <Target Name = "VisualStudioForAppluggestBuild"> từ tệp nằm ở điểm 3 (ví dụ: chỉ cần tìm tệp, không sao chép và đổi tên nó) , vào tệp proj của dự án của riêng bạn và thực hiện thay đổi tương tự như được mô tả trong điểm 4. Điều này sẽ ghi đè hành vi chỉ cho dự án của bạn và sau đó sẽ không ảnh hưởng đến bất kỳ điều gì khác trên máy của bạn. Nếu có thay đổi đối với tệp gốc trong bản cập nhật VS trong tương lai, bạn vẫn có thể cần phải lặp lại quy trình.
Adam

3

Là lắp ráp của bạn được ký hợp lệ?

Để kiểm tra điều này, nhấn Alt + Enter trên dự án của bạn (hoặc nhấp chuột phải, sau đó chọn Thuộc tính). Chuyển đến "Ký". Xác minh rằng hộp kiểm "Đăng ký lắp ráp" đã được chọn và tệp khóa tên mạnh được chọn và "Chỉ ký hiệu trễ" không được chọn .


Tôi chưa ký * *, nhưng không có vấn đề gì với nó trước đây (tôi không có lỗi biên dịch trước đó). Dll được tham chiếu trong một trong những dự án được tham chiếu của dự án đã xuất bản, tôi tìm thấy giải pháp xấu xí để tham chiếu dll trực tiếp từ dự án đã xuất bản, bạn có thể vui lòng cho tôi biết tại sao nó hoạt động bây giờ không? Hoặc làm thế nào tôi có thể giải quyết vấn đề theo cách khác? Cảm ơn bạn
Serge Kucher

1
@ user520535: tốt, nếu bạn chưa ký thư viện trước đó, bạn nên. Đây không phải là cách duy nhất để thư viện này có thể được sử dụng bởi các hội đồng đã ký (một hội đồng đã ký không thể gọi một hội đồng chưa ký), nhưng làm việc với các hội đồng không được ký cũng rất khó khăn khi bạn xử lý các trình cắm / thêm -in. Bây giờ, tại sao nó bắt đầu gây ra vấn đề bây giờ mà không phải trước đây? Tôi không biết nữa.
Arseni Mourzenko

@ user520535: nếu được, bạn có thể chấp nhận hoặc đưa ra câu trả lời.
Arseni Mourzenko

3

Bây giờ đây là một cách tiếp cận khác nhau cho vấn đề:

  • Nhấp chuột phải vào dự án và chọn tùy chọn 'Unload Project'. Bạn sẽ nhận thấy dự án của bạn trở nên không có sẵn.

  • Nhấp chuột phải vào dự án không có sẵn và chọn tùy chọn 'Chỉnh sửa'.

  • Cuộn xuống thẻ '<Itemgroup>' chứa tất cả các thẻ tài nguyên.

  • Bây giờ đi đến tham chiếu đã được hiển thị trên danh sách lỗi, bạn sẽ nhận thấy nó sử dụng một thẻ duy nhất (tức là < Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >).

  • Thay đổi đó để trông như sau:

.

<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 >
  • Lưu các thay đổi của bạn, Nhấp chuột phải vào dự án không khả dụng một lần nữa và nhấp vào tùy chọn 'Tải lại dự án', sau đó xây dựng.

3

Điều này được gây ra khi bạn thay đổi phiên bản của dll được tham chiếu. Bạn cần xóa tất cả các mục, hoặc trong thư mục xây dựng mục tiêu.


2

Tôi đã nhận được lỗi trình biên dịch tương tự. Khi tôi thêm dự án phụ thuộc của tệp dll vào giải pháp, vấn đề đã được giải quyết.


2

Nếu dự án chính của bạn sử dụng một số dự án thư viện và có tham chiếu đến chúng, bạn có thể gây ra sự cố này nếu dự án của bạn tham chiếu đến tệp dll lắp ráp thay vì dự án thư viện khi bạn thay đổi một cái gì đó trong dự án thư viện của bạn (ví dụ: đổi tên một lớp).

Bạn có thể kiểm tra tất cả các tham chiếu đến dự án chính của mình bằng cách xem trong cửa sổ Trình duyệt đối tượng (menu Xem-> Trình duyệt đối tượng). Tham chiếu đến tệp dll luôn có số phiên bản. Ví dụ: TestLib [1.0.0.0]

Giải pháp: xóa tham chiếu hiện tại của dự án chính của bạn vào dự án thư viện và thêm tham chiếu vào dự án thư viện đó.


1

Sau khi thử hầu hết các giải pháp ở đây, cuối cùng tôi chỉ cần thêm một tham chiếu đến dự án từ dự án nhấp một lần, điều này đã thay đổi nó thành Bao gồm (Tự động) từ Bao gồm và cuối cùng nó đã hoạt động.


1

Điều giúp tôi là tôi đã vào Gói quản lý giải pháp và xem xét gói đã cài đặt gây ra sự cố. Tôi thấy rằng một số dự án đã tham khảo cùng một gói nhưng các phiên bản khác nhau. Tôi căn chỉnh chúng dựa trên nhu cầu của tôi và nó đã làm việc.


0

Tôi đã có điều này trong một giải pháp với 6 dự án. Một trong những dự án của tôi đã đề cập đến hội đồng có tên là một tài liệu tham khảo. Những người khác đều chỉ vào tài liệu tham khảo dự án.

Tôi thường nhận được một lỗi khác nhau trong những trường hợp này.

Giải pháp của tôi là xóa hội đồng có tên bất cứ nơi nào nó được tham chiếu và thêm lại. Khi tôi làm việc thông qua dự án, vấn đề đã biến mất. Trước khi làm điều này, tôi đã thử làm sạch giải pháp cũng như đảm bảo không có dự án nào được ký kết.

hy vọng nó sẽ giúp được ai đó ...


0

Nếu nó không khớp với các phụ thuộc phụ thuộc, hãy chuyển đến trình quản lý gói NuGet ở cấp độ giải pháp và kiểm tra các tab Cập nhật và Hợp nhất, hài hòa tất cả.


0

Gần đây tôi gặp vấn đề này. Trong trường hợp của tôi, tôi có các gói NuGet trên các cụm khác nhau. Những gì tôi có là các phiên bản khác nhau của cùng một gói NuGet được liên kết với các hội đồng của riêng tôi.
Giải pháp của tôi là sử dụng trình quản lý gói NuGet trên Giải pháp, trái ngược với các dự án riêng lẻ. Điều này cho phép tùy chọn "hợp nhất", trong đó bạn có thể nâng cấp các gói NuGet của mình qua bao nhiêu dự án mà bạn muốn - vì vậy tất cả chúng đều tham chiếu cùng một phiên bản lắp ráp. Khi tôi thực hiện hợp nhất, thất bại xây dựng biến mất.


0

Tôi cũng gặp phải một số vấn đề, tất cả những gì tôi phải làm là xóa dll (có thể tìm thấy trong tài liệu tham khảo) gây ra lỗi và thêm lại .

Hoạt động như một lá bùa.



0

Chỉ cần đi đến Xuất bản -> Tệp ứng dụng -> Và thay đổi trạng thái xuất bản dll bị ảnh hưởng từ điều kiện tiên quyết để bao gồm! Điều này làm việc cho tôi!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.