Lỗi khi triển khai ứng dụng ClickOnce - Tham chiếu trong tệp kê khai không khớp với danh tính của cụm đã tải xuống


105

Tôi đang cố gắng triển khai ứng dụng ClickOnce, nhưng cài đặt không thành công trên máy khách. Đây là nhật ký lỗi:

PLATFORM VERSION INFO
Windows             : 6.1.7601.65536 (Win32NT)
Common Language Runtime     : 4.0.30319.1
System.Deployment.dll       : 4.0.30319.1 (RTMRel.030319-0100)
clr.dll             : 4.0.30319.1 (RTMRel.030319-0100)
dfdll.dll           : 4.0.30319.1 (RTMRel.030319-0100)
dfshim.dll          : 4.0.31106.0 (Main.031106-0000)

SOURCES
Deployment url          : http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application
                    Server      : Microsoft-IIS/7.5
                    X-Powered-By    : ASP.NET
Deployment Provider url     : http://MyProduct.com/Download/Workstation/MyProduct%20Front%20Desk.application
                    Server      : Microsoft-IIS/7.5
                    X-Powered-By    : ASP.NET
Application url         : http://MyProduct.com/Download/Workstation/Application%20Files/MyProduct%20Front%20Desk_1_0_0_7/MyProduct%20Front%20Desk.exe.manifest
                    Server      : Microsoft-IIS/7.5
                    X-Powered-By    : ASP.NET

IDENTITIES
Deployment Identity     : MyProduct Front Desk.application, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, processorArchitecture=msil
Application Identity        : MyProduct Front Desk.exe, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, processorArchitecture=msil, type=win32

APPLICATION SUMMARY
* Installable application.

ERROR SUMMARY
Below is a summary of the errors, details of these errors are listed later in the log.
* Activation of http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application resulted in exception. Following failure messages were detected:
    + Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe.

COMPONENT STORE TRANSACTION FAILURE SUMMARY
No transaction error was detected.

WARNINGS
There were no warnings during this operation.

OPERATION PROGRESS STATUS
* [03/17/11 11:51:04] : Activation of http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application has started.
* [03/17/11 11:51:04] : Processing of deployment manifest has successfully completed.
* [03/17/11 11:51:04] : Installation of the application has started.
* [03/17/11 11:51:05] : Processing of application manifest has successfully completed.
* [03/17/11 11:51:06] : Found compatible runtime version 4.0.30319.
* [03/17/11 11:51:06] : Request of trust and detection of platform is complete.

ERROR DETAILS
Following errors were detected during this operation.
* [03/17/11 11:51:30] System.Deployment.Application.InvalidDeploymentException (RefDefValidation)
    - Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe.
    - Source: System.Deployment
    - Stack trace:
        at System.Deployment.Application.DownloadManager.ProcessDownloadedFile(Object sender, DownloadEventArgs e)
        at System.Deployment.Application.FileDownloader.DownloadModifiedEventHandler.Invoke(Object sender, DownloadEventArgs e)
        at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next)
        at System.Deployment.Application.SystemNetDownloader.DownloadAllFiles()
        at System.Deployment.Application.FileDownloader.Download(SubscriptionState subState)
        at System.Deployment.Application.DownloadManager.DownloadDependencies(SubscriptionState subState, AssemblyManifest deployManifest, AssemblyManifest appManifest, Uri sourceUriBase, String targetDirectory, String group, IDownloadNotification notification, DownloadOptions options)
        at System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory& downloadTemp)
        at System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc)
        at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
        at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

COMPONENT STORE TRANSACTION DETAILS
No transaction information is available.

Exe chính mà tôi cần triển khai là MyProductFrontDesk.exe, có phụ thuộc vào MyProductSiteServer.exe- và đó dường như là nơi phát ra lỗi: "Tham chiếu trong tệp kê khai không khớp với danh tính của tập hợp đã tải xuống MyProductSiteServer.exe."

Tệp kê khai nào cần được sửa chữa? Và làm thế nào?


Dự án MySiteServer.exe có trong cùng một giải pháp Visual Studio như MyProductFrontDesk.exe không? Nếu vậy, cấu hình bản dựng của bạn có cả hai tổ hợp được chọn để xây dựng không?
Jay

@Jay - vâng, trong cùng một giải pháp, cả hai đều được chọn để xây dựng.
Shaul Behr

Câu trả lời:


111

một sự cố với Visual Studio 2008 được giải quyết bằng cách không nhúng tệp kê khai mặc định - một trong những nhận xét trên bài viết đó cho thấy sự cố vẫn tồn tại trong Visual Studio 2010.

Trong thuộc tính dự án -> tab Ứng dụng -> Tài nguyên -> hộp kiểm Biểu tượng và tệp kê khai , cài đặt "Nhúng tệp kê khai với cài đặt mặc định" đã gây ra sự cố. Đặt nó thành "Tạo ứng dụng không có tệp kê khai" sẽ khắc phục được sự cố.


Tôi thấy nhận xét 488301 đặc biệt hữu ích: <assemblyIdentity/>phần tử trong tệp kê khai tùy chỉnh có thể được điều chỉnh (hoặc bị bỏ qua để cho phép trình biên dịch phát ra nhận dạng hợp ngữ chính xác) trong .manifesttệp tùy chỉnh của bạn , cho phép người ta chỉ định những thứ như <requestedExecutionLevel/>mà không phá vỡ ClickOnce.
binki

4
Kịch bản của tôi là một ứng dụng GUI cần một ứng dụng thứ hai là ứng dụng bảng điều khiển. Nếu giống như tôi, bạn không muốn thay đổi cài đặt mặc định, xuất bản thủ công ứng dụng thứ hai đó đã tạo một app.manifest xuất hiện trong thư mục Thuộc tính, sau đó xuất bản lại ứng dụng đầu tiên hoạt động mà không cần phải thay đổi cài đặt mặc định nhúng tệp kê khai.
aybe

7
Gặp vấn đề tương tự với VS 2013. Giải pháp này đã hoạt động.
EagleBeak

2
@EagleBeak, menu này ở đâu trong VS2013? Tôi không thấy bất cứ điều gì về "tạo ứng dụng không có tệp kê khai"
Nefariis

3
Kể từ tháng 6 năm 2016, câu trả lời chính xác là định cấu hình Cài đặt Bảo mật ClickOnce (xem câu trả lời được đăng bởi Mauro).
Pierre Arnaud

57

Tôi đã gặp vấn đề tương tự khi thêm tham chiếu vào một dự án khác.

Cách giải quyết điều này là bật Cài đặt Bảo mật ClickOnce trong tất cả các dự án được tham chiếu như Ian đã giải thích ở đây (tôi nhấn mạnh):

Đối với tôi, cách giải quyết vấn đề này là để đảm bảo rằng tất cả các Dự án trong Giải pháp hiển thị " Tab Bảo mật " trong " Thuộc tính Dự án " của họ có Tùy chọn " Bật Cài đặt Bảo mật ClickOnce " Được đánh dấu bằng Tùy chọn " Đây là sự tin tưởng hoàn toàn ứng dụng "Đã chọn. Điều này liên quan đến việc tạo Tệp kê khai một cách chính xác và ứng dụng sẽ không cài đặt nếu các tùy chọn này không được đặt trên tất cả các Dự án trong Giải pháp yêu cầu nó.

Tôi tin rằng đây là cách thích hợp để khắc phục khi thực hiện tham chiếu đến một dự án khác theo cùng một giải pháp.

Bài đăng trên diễn đàn được liên kết hiện đã hết hạn, nhưng nó vẫn có sẵn trên kho lưu trữ tại đây .


1
Sau khi thử rất nhiều giải pháp chỉ có giải pháp này phù hợp với tôi. Vì vậy, tôi cũng nghĩ rằng đây sẽ là câu trả lời được chấp nhận ...
Tareq

Bạn có thể làm tương tự với sửa đổi .cprojtập tin với<PropertyGroup><TargetZone>LocalIntranet</TargetZone></PropertyGroup>
VMAtm

Tôi đã tắt hai cài đặt đó trong khi tôi đang đánh lừa https://github.com/Squirrel. Khi các triển khai ClickOnce (không sản xuất) của tôi ngừng hoạt động, tôi đã quên hết điều này.
Walter Stabosz

35

Tôi cũng gặp phải vấn đề tương tự, nhưng giải pháp của tôi rất khác.

Ứng dụng ClickOnce của tôi đang tham chiếu một dự án tệp EXE khác trong giải pháp của tôi, vì vậy khi khách hàng tải xuống và có một tệp EXE khác, thì dự án đó không có tệp kê khai.

Loại bỏ sự phụ thuộc vào tệp thực thi khác đã giải quyết được vấn đề của tôi.


2
Tôi cũng có hai EXE. Việc loại bỏ phần phụ thuộc sẽ loại trừ EXE khác biệt khỏi bản dựng. Có cách nào để bao gồm nó không?
Uri Abramson

10
Đây là giải pháp cho tôi. Một trong những dự án mà EXE chính của tôi đang tham khảo là 'Ứng dụng Windows'. Khi tôi thay đổi dự án đó thành 'Thư viện lớp học' và xuất bản lại, mọi thứ đều hoạt động.
Chris Ray

Tôi đã sử dụng đề xuất của @ChrisRay trong VS2012 và chương trình được cài đặt mà không gặp bất kỳ khó khăn nào. Cảm ơn!
Rolan

1
như người dùng @Aybe đề cập trong nhận xét của một câu trả lời khác, nếu bạn giả xuất bản ứng dụng thứ hai, nó sẽ nhận được tệp kê khai của riêng nó và sau đó bạn có thể xuất bản ứng dụng đầu tiên và cả hai chương trình sẽ hoạt động cùng nhau. (Trong trường hợp của tôi, tôi có hai chương trình, một trong đó kêu gọi người kia.)
Dave Cousineau

Giải pháp cho tôi thực sự là cả hai (this và @stuartd) - Tôi có EXE như một hội tham chiếu, không có tệp kê khai. Nhưng tôi không thể "xóa" tham chiếu này vì tôi cần sử dụng nó. Vì vậy, tôi đã phải đi đến dự án của phụ thuộc EXE này, áp dụng gợi ý của stuartd. Sau đó, mọi thứ hoạt động tuyệt vời.
KFL

11

Tôi xác nhận rằng sự cố cũng tồn tại trong Visual Studio 2010. Việc chọn "Tạo ứng dụng không có tệp kê khai" trong Thuộc tính dự án - Ứng dụng - Tài nguyên đã giải quyết được sự cố.


8
Chỉ cần lưu ý rằng tôi phải thay đổi thuộc tính này trên dự án mà thông báo lỗi đang phàn nàn, đối với tôi là một dự án đang được tham chiếu bởi dự án mà tôi thực sự đang cố gắng xuất bản, không phải dự án mà tôi thực sự đang cố gắng xuất bản .
deaddog

6

Điều này cũng có thể xảy ra nếu bạn có hai phiên bản khác nhau của gói NuGet được tham chiếu trong các tệp DLL khác nhau trong dự án của bạn. Trong trường hợp của tôi, tôi đang sử dụng một khuôn khổ có tên Catel và tôi có một phiên bản mới hơn được tham chiếu trong một tệp DLL hơn một tệp khác (giám sát), nhưng điều này khiến ClickOnce phát ra lỗi này. Tham chiếu cùng một phiên bản đã giải quyết được sự cố.


4

Tôi gặp vấn đề tương tự, nhưng giải pháp của tôi là thay đổi 'Mục tiêu nền tảng' thành 'x86' (Thuộc tính dự án -> Tab xây dựng). Nó đã được đặt thành Bất kỳ CPU nào. Ngay sau khi tôi thay đổi cài đặt và xuất bản lại, trình cài đặt ClickOnce đã có thể hoàn tất.


1
Vấn đề rất tương tự: Tôi đã bật "Ưu tiên 32-bit"; tắt nó đi đã khắc phục được sự cố.
Roman Starkov

4

Tôi đã gặp phải lỗi tương tự khi triển khai với dự án được đặt thành Gỡ lỗi. Khi nó được đổi lại thành Release không có lỗi.


4

Tôi đã có chính xác cùng một vấn đề. Tôi không thể loại bỏ phần phụ thuộc vì nó là cần thiết cho dự án chính. Dự án thứ hai là một dự án giao diện điều khiển.

Tôi đã đổi thành Thư viện lớp , và sau đó tất cả đều hoạt động.


Nhận xét này đã khắc phục sự cố của tôi. Cảm ơn bạn!
casaout

2

Một cách giải quyết khác, trong trường hợp không thể thay đổi exe phụ thuộc với tệp kê khai ứng dụng xấu (giả sử đến từ gói NuGet). Mã nhị phân có thể được bao gồm dưới dạng nội dung có phần mở rộng giả, vì vậy ClickOnce không thử xác thực tệp kê khai và sau đó đổi tên trong khi khởi động ứng dụng.

csproj:

  <Content Include="..\packages\<package>\lib\<app>.exe">
    <Link><app>.exe.bin</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
  <ItemGroup>
    <PublishFile Include="<app>">
      <Visible>False</Visible>
      <Group>
      </Group>
      <TargetPath>
      </TargetPath>
      <PublishState>Exclude</PublishState>
      <IncludeHash>True</IncludeHash>
      <FileType>Assembly</FileType>
    </PublishFile>
  </ItemGroup>

App.xaml.cs:

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        var appDir = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
        if (!File.Exists($"{appDir}\\<app>.exe"))
        {
            File.Copy($"{appDir}\\<app>.exe.bin", $"{appDir}\\<app>.exe");
        }
    }
}

1

Tôi gặp vấn đề tương tự và tôi đã thử tất cả các giải pháp được đề xuất trước đó ở đây và tất cả chúng đều không hoạt động.

Tôi đã sửa nó bằng cách thay đổi vị trí cập nhật. Từ thuộc tính dự án -> Xuất bản -> Cập nhật . Thay đổi vị trí cập nhật thành thư mục đã xuất bản của bạn.


1

CŨNG ĐƯỢC GIẢI QUYẾT CHO ClickOnce .exe gọi .exe gọi .exe.

Tôi cũng gặp sự cố này khi sử dụng VB.NET trong Visual Studio 2010.

Tôi có ứng dụng ClickOnce Windows Forms tham chiếu đến ứng dụng Windows Forms thứ hai tham chiếu đến ứng dụng Windows Forms thứ ba. (Các ứng dụng thứ hai và thứ ba này là tệp EXE chứ không phải tệp DLL vì đơn giản, vì chúng đều có khả năng được chạy độc lập hoặc được gọi với các thuộc tính được chuyển cho chúng.)

Tôi đã phải nhận xét CẢ HAI nội dung kê khai của ứng dụng thứ hai và thứ ba cho mỗi:

Hướng dẫn: Triển khai ứng dụng ClickOnce theo cách thủ công

Nó hoạt động hoàn hảo.


1

Nếu bạn có một chương trình chính tham chiếu đến chương trình khác thì bạn phải thực hiện thủ thuật "Tạo ứng dụng không có tệp kê khai" trên Chương trình của chương trình chính:

Dự án -> Thuộc tính -> Tab Ứng dụng -> Tài nguyên -> Tệp kê khai -> thả xuống "Tạo ứng dụng không cần tệp kê khai"

và sau đó chuyển sang Thuộc tính dự án của chương trình được tham chiếu và lặp lại quá trình.


0

Tôi đang sử dụng Visual Studio 2012 trên Windows 7 và cần xuất bản một giải pháp bao gồm hai dự án.

Như Eduardo đã chỉ ra, việc đánh dấu cả hai dự án là ClickOnce và bật Ứng dụng Tin cậy Hoàn toàn sẽ giải quyết được vấn đề.


0

Tôi có một chút vấn đề khác mà tôi có thể giải quyết và vì vậy tôi muốn đăng. Vấn đề của tôi là tôi đã chạy 3 chi nhánh trong TFS. Tôi đã nâng cấp các điều khiển Telerik ở một trong các chi nhánh của mình nhưng không phải các chi nhánh khác. Sau khi tôi nâng cấp các điều khiển Telerik ở cả 3 nhánh và xuất bản lại, nó hoạt động và lỗi này đã biến mất.

Tôi đang chạy VS2015 vào thời điểm đó.


0

Nó là thú vị. Tôi chỉ triển khai lại ứng dụng và vấn đề đã được giải quyết. Có thể một tệp bị hỏng do mạng.


0

Tôi sử dụng mage.exeđể tạo tệp kê khai của mình. Thêm điều này vào của tôi đã .csprojkhắc phục sự cố. Bạn cũng có thể thử -nowin32manifest cờ trình biên dịch ; Tôi đã không thử nghiệm nó. Tôi không thấy "Tạo ứng dụng không có tệp kê khai" của stuartd trong Visual Studio 2017; Tôi nghĩ đây là những gì nó làm.

<PropertyGroup>
  <NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>

Tôi cũng có cái này trong .csproj:

<GenerateManifests>false</GenerateManifests>

0

Trong phiên bản Visual Studio 2017 của tôi, phiên bản 15.6.6 (nhưng có thể đã có trước đó), tôi thấy rằng Tệp ứng dụng không nằm trong Dự án Exe Nhấp chuột phải và Xuất bản, nhưng trong Tab Xuất bản Thuộc tính Dự án nơi bạn có thể đặt của các Tệp ứng dụng mà bạn muốn cài đặt.

Vì vậy, loại bỏ những người là một vấn đề. Nếu một cái gì đó đã được cài đặt trên máy tính nơi ứng dụng này sẽ được cài đặt, không có lý do gì để cố gắng cài đặt lại nó, ngoại trừ trường hợp bạn cần tham chiếu để nó chạy. Nếu nó được cài đặt những gì đã có trên máy tính, nhưng đến một thư mục khác, nó có thể không hoạt động. Tốt nhất là sử dụng các ứng dụng hoặc tập hợp dll khác vào cùng một vị trí như chúng đã được cài đặt trước đó.


0

Tôi đã gặp vấn đề tương tự cách đây vài phút và dưới đây là các bước tôi đã sử dụng để giải quyết vấn đề đó.

Chìa khóa

  • a = Dự án chính (dự án bạn muốn xuất bản, ví dụ: myProduct)
  • b = Dự án tham chiếu (ví dụ: MyProductSiteServer)

Danh mục

  1. Điều hướng đến thuộc tính -> Ứng dụng -> Tài nguyên -> kiểm tra biểu tượng và tệp kê khai (cho cả a và b)

  2. Điều hướng đến thuộc tính -> Xây dựng: đảm bảo rằng a và b trên cùng một nền tảng mục tiêu

  3. Điều hướng đến thuộc tính -> Bảo mật và đảm bảo rằng a và b đã chọn các cài đặt này: "Bật cài đặt bảo mật ClickOnce" và "Đây là ứng dụng tin cậy đầy đủ"

  4. Điều hướng đến thuộc tính -> Xuất bản: Tôi khuyên bạn nên thay đổi đường dẫn của thư mục xuất bản


0

Tôi đã gặp vấn đề chính xác này với ứng dụng VS 2019 của mình.

Tôi đã thử tạo ứng dụng mà không có tệp kê khai, tuy nhiên điều đó không hoạt động.

Tuy nhiên, những gì đã hoạt động như sau:

  1. Đi tới Xây dựng -> Xuất bản -> Ứng dụng
  2. Bấm vào nút "Thông tin hội"
  3. Đánh dấu vào tùy chọn "Make assembly COM-Visible"

Hy vọng rằng, điều này sẽ giúp!

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.