ClickOnce uygulamasını dağıtırken hata oluştu - Manifestteki başvuru, indirilen derlemenin kimliğiyle eşleşmiyor


105

Bir ClickOnce uygulamasını dağıtmaya çalışıyorum, ancak istemcide yükleme başarısız oluyor. İşte hata günlüğü:

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.

Dağıtmam gereken ana exe MyProductFrontDesk.exe, bağımlılığı olan MyProductSiteServer.exeve hatanın atıldığı yer gibi görünen: "Bildirimdeki başvuru, indirilen MyProductSiteServer.exe derlemesinin kimliğiyle eşleşmiyor."

Hangi bildirimin düzeltilmesi gerekiyor? Ve nasıl?


MySiteServer.exe projesi, MyProductFrontDesk.exe ile aynı Visual Studio çözümünde mi? Öyleyse, derleme yapılandırmanızda derlemek için seçilen her iki derleme var mı?
Jay

@Jay - evet, aynı çözümde, her ikisi de oluşturmak için seçildi.
Shaul Behr

Yanıtlar:


111

Orada varsayılan manifestosunu gömme değil çözülür Visual Studio 2008 ile ilgili bir sorun olduğunu makale yorumların bir problem hala Visual Studio 2010 var anlaşılacağı -.

Proje özelliklerinde -> Uygulama sekmesi -> Kaynaklar -> onay kutusu Simge ve bildirimde , "Manifest'i varsayılan ayarlarla yerleştir" ayarı soruna neden oldu. "Bildirim olmadan uygulama oluştur" olarak ayarlamak sorunu çözer.


Yorum 488301'i özellikle yararlı buldum : <assemblyIdentity/>özel bildirimdeki öğe, özel .manifestdosyanızda ayarlanabilir (veya derleyicinin doğru montaj kimliğini yayınlamasına izin vermek için çıkarılabilir) , bu da bir kişinin <requestedExecutionLevel/>ClickOnce'ı kırmadan gibi şeyleri belirtmesini sağlar .
binki

4
Senaryom, konsol uygulaması olan 2. bir uygulamaya ihtiyaç duyan bir GUI uygulamasıydı. Benim gibi varsayılan ayarları değiştirmeyi tercih etmezseniz, bu 2. uygulamanın Özellikler klasöründe görünen bir app.manifest'i manuel olarak yayınlaması, ardından 1. uygulamanın yeniden yayınlanması, bir bildirimi gömmenin varsayılan ayarlarını değiştirmek zorunda kalmadan çalıştı.
aybe

7
VS 2013 ile aynı sorunu yaşadım. Bu çözüm işe yaradı.
EagleBeak

2
@EagleBeak VS2013'te bu menü nerede? "Tezahür
ettirmeden

3
Haziran 2016 itibariyle, doğru cevap ClickOnce Güvenlik Ayarlarını yapılandırmaktır (Mauro tarafından gönderilen cevaba bakınız).
Pierre Arnaud

58

Başka bir projeye referans eklediğimde de aynı sorunu yaşadım.

Bunu çözmenin yolu , Ian'ın burada açıkladığı gibi (vurgu benim) referans alınan tüm projelerde ClickOnce Güvenlik Ayarlarını etkinleştirmekti :

Benim için bunun çözülme şekli, " Proje Özellikleri " nde " Güvenlik Sekmesi " ni açığa çıkaran Çözüm kapsamındaki tüm Projelerin " ClickOnce Güvenlik Ayarlarını Etkinleştir " Seçeneğinin "Seçenekle İşaretli" olduğundan emin olmaktı. Bu tam bir güvendir uygulama "Seçildi. Bu, Manifest'i doğru bir şekilde oluşturmakla ilgilidir ve bu seçenekler Çözüm içerisindeki tüm Projelerde bunu gerektiren tüm Projelerde ayarlanmazsa uygulama yüklenmez.

Aynı çözüm altında başka bir projeye atıfta bulunurken bunu düzeltmenin doğru yolu olduğuna inanıyorum.

Bağlantılı forum gönderisinin süresi şimdiye kadar doldu, ancak burada arşivde mevcut .


1
Bu kadar çok çözümü denedikten sonra sadece bu çözüm benim için çalışıyor. O yüzden bunun da kabul edilen cevap olması gerektiğini düşünüyorum ...
Tareq

.cprojDosyayı değiştirerek de aynısını yapabilirsiniz<PropertyGroup><TargetZone>LocalIntranet</TargetZone></PropertyGroup>
VMAtm

Dalga geçerken bu iki ayarı devre dışı bıraktım https://github.com/Squirrel. (Üretim dışı) ClickOnce dağıtımlarım çalışmayı durdurduğunda, tüm bunları unutmuştum.
Walter Stabosz

35

Aynı problemle karşılaşıyordum ama çözümüm çok farklıydı.

ClickOnce uygulamam, çözümümde başka bir EXE dosyası projesine başvuruyordu, bu yüzden istemci onu indirdiğinde ve başka bir EXE dosyası olduğunda, birinin bildirim içermediği başka bir EXE dosyası vardı.

Başka bir yürütülebilir dosyaya olan bağımlılığı kaldırmak sorunumu çözdü.


2
Ayrıca iki EXE'im var. Bağımlılığın kaldırılması, başvurulan EXE'yi derlemeden hariç tutar. Dahil etmenin bir yolu var mı?
Uri Abramson

10
Bu benim için çözümdü. Ana EXE dosyamın başvurduğu projelerden biri de bir 'Windows Uygulaması'ydı. Bu projeyi 'Sınıf Kitaplığı' olarak değiştirip yeniden yayınladığımda, her şey çalıştı.
Chris Ray

VS2012'de @ChrisRay'in önerisini kullandım ve programı sorunsuz bir şekilde yükledim. Teşekkürler!
Rolan

1
@Aybe kullanıcısının başka bir cevabın yorumunda bahsettiği gibi, eğer ikinci uygulamayı yayınlarsanız, kendi manifestini alır ve daha sonra ilk uygulamayı yayınlayabilirsiniz ve her iki program birlikte çalışacaktır. (Benim durumumda biri diğerini çağıran iki programım var.)
Dave Cousineau

Benim için çözüm gerçekten her ikisiydi (bu ve @stuartd) - Bir manifesto içermeyen bir referans derlemesi olarak bir EXE'm var. Ancak kullanmam gerektiğinden bu referansı "kaldıramıyorum". Bu yüzden bu EXE bağımlılığı projesine gitmem ve stuartd'ın önerisini uygulamam gerekiyordu. O zaman her şey harika çalışıyor.
KFL

11

Sorunun Visual Studio 2010'da da mevcut olduğunu doğruladım. Proje Özellikleri - Uygulama - Kaynaklar'da "Bildirim olmadan uygulama oluştur" u seçmek sorunu çözdü.


8
Hata mesajının şikayet ettiği projede bu özelliği değiştirmem gerektiğine dair bir not, bu benim için aslında yayınlamaya çalıştığım proje tarafından referans verilen bir projeydi, aslında yayınlamaya çalıştığım proje değil .
deadlydog

6

Bu, projenizdeki farklı DLL dosyalarında başvurulan bir NuGet paketinin iki farklı sürümüne sahipseniz de olabilir . Benim durumumda Catel adında bir çerçeve kullanıyordum ve bir DLL dosyasında diğerinden daha yeni bir sürüm referans aldım (gözetim), ancak bu ClickOnce'un bu hatayı vermesine neden oldu. Aynı sürüme başvurmak sorunu çözdü.


4

Aynı sorunu yaşadım, ancak çözümüm 'Platform hedefini' 'x86' olarak değiştirmekti (Proje Özellikleri -> Oluşturma Sekmesi). Herhangi bir CPU olarak ayarlandı. Ayarı değiştirip yeniden yayınladığım anda, ClickOnce yükleyicisi tamamlamayı başardı.


1
Çok benzer bir sorun: "32 biti tercih et" seçeneğini etkinleştirmiştim; kapatmak sorunu çözdü.
Roman Starkov

4

Proje Debug olarak ayarlandığında dağıtım yaparken aynı hatayı yaşadım. Tekrar Serbest Bırak'a değiştirildiğinde herhangi bir hata olmadı.


4

Ben de tamamen aynı sorunu yaşadım. Ana proje tarafından ihtiyaç duyulduğu için bağımlılığı kaldıramadım. İkinci proje bir konsol projesiydi.

Sınıf Kitaplığı'na geçtim ve sonra hepsi işe yaradı.


Bu yorum sorunumu çözdü. Teşekkür ederim!
casaout

2

Başka bir geçici çözüm, kötü uygulama bildirimiyle bağımlılık exe'nin değiştirilememesi durumunda (örneğin bir NuGet paketinden geliyor). İkili, sahte bir uzantıya sahip içerik olarak eklenebilir, bu nedenle ClickOnce bildirimi doğrulamayı denemeyecek ve ardından uygulama başlatılırken yeniden adlandırılmayacaktır.

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

Aynı sorunu yaşadım ve burada daha önce önerilen tüm çözümleri denedim ve hepsi işe yaramadı.

Güncelleme konumunu değiştirerek düzelttim. Proje özelliklerinden -> Yayınla -> Güncellemeler . Güncelleme konumunu yayınlanan klasörünüz olarak değiştirin.


1

ClickOnce .exe için .exe çağrısı yapan .exe için AYRICA ÇÖZÜM.

Visual Studio 2010'da VB.NET kullanarak da bu sorunu yaşadım.

Sırayla üçüncü bir Windows Forms uygulamasına başvuran ikinci bir Windows Forms uygulamasına başvuran bir ClickOnce Windows Forms uygulamam var. (Bu ikinci ve üçüncü uygulamalar EXE basitlik açısından DLL dosyası yerine dosyalarıdır, çünkü eşit derecede tek başına çalıştırılmaları veya kendilerine iletilen özelliklerle çağrılmalarıdır.)

Aşağıdakilere göre İKİ ikinci ve üçüncü uygulamanın manifest içeriğini de yorumlamak zorunda kaldım :

İzlenecek yol: Bir ClickOnce Uygulamasını Manuel Olarak Dağıtma

Mükemmel çalışıyor.


1

Bir diğerine başvuran bir ana programınız varsa, ana programın Programında "Bildirim olmadan uygulama oluştur" hilesini yapmanız gerekir:

Proje -> Özellikler -> Uygulama Sekmesi -> Kaynaklar -> Bildirim -> "Bildirim olmadan uygulama oluştur" açılır menüsü

ve sonra başvurulan programın Proje Özelliklerine geçin ve işlemi tekrarlayın.


0

Windows 7 üzerinde Visual Studio 2012 kullanıyorum ve iki projeden oluşan bir çözüm yayınlamam gerekiyor.

Eduardo'nun işaret ettiği gibi, her iki projeyi de ClickOnce olarak işaretlemek ve Tam Güven Uygulamasını etkinleştirmek sorunu çözer.


0

Çözebildiğim biraz farklı bir sorunum vardı ve bu yüzden göndermek istedim. Benim sorunlarım, TFS'den 3 şube çalıştırıyor olmamdı. Telerik kontrollerini şubelerimden birinde yükseltmiştim, diğerlerinde yükseltmemiştim. 3 şubede de Telerik kontrollerini yükselttikten ve yeniden yayınladıktan sonra çalıştı ve bu hata ortadan kalktı.

O sırada VS2015'i çalıştırıyordum.


0

Bu ilginç. Sadece uygulamayı yeniden dağıttım ve sorun çözüldü. Belki ağ nedeniyle bir dosya bozulması.


0

Bildirimi mage.exeoluşturmak için kullanırım . Bunu benim .csprojsorunuma eklemek sorunu çözdü. -nowin32manifest Derleyici bayrağını da deneyebilirsiniz ; Ben test etmedim. Visual Studio 2017'de stuartd'ın "Bildirim olmadan uygulama oluştur" ifadesini görmüyorum; Sanırım yaptığı şey bu.

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

Bunu ayrıca bende de var .csproj:

<GenerateManifests>false</GenerateManifests>

0

Visual Studio 2017 sürümümde, sürüm 15.6.6 (ancak daha önce de olmuş olabilir) Uygulama Dosyalarının Sağ Tıklama Exe Projesi ve Yayımlama'da olmadığını, ancak hangisini ayarlayabileceğiniz Proje Özellikleri Yayınlama Sekmesi altında buldum. Kuruluma koymak istediğiniz Uygulama Dosyalarının.

Öyleyse sorun olanları çıkarın. Bu uygulamanın yükleneceği bir bilgisayarda zaten yüklü bir şey varsa, çalışması için referansa ihtiyaç duymanız dışında, yine de yeniden yüklemeyi denemeniz için hiçbir neden yoktur. Bilgisayarda zaten olanı kuracak olsaydı, ancak farklı bir klasöre çalışmayabilirdi. En iyisi, diğer uygulamaları veya dll derlemelerini daha önce yüklendikleri konumlarda kullanmaktır.


0

Aynı sorunu birkaç dakika önce yaşadım ve aşağıda çözmek için kullandığım adımlar var.

Anahtar

  • a = Ana proje (yayınlamak istediğiniz proje, örneğin myProduct)
  • b = Referans proje (örneğin MyProductSiteServer)

Kontrol listesi

  1. Özellikler'e gidin -> Uygulama -> Kaynaklar -> simgeleri ve bildirimi kontrol edin (hem a hem de b için)

  2. Özelliklere gidin -> Oluşturun: a ve b'nin aynı hedef platformda olduğundan emin olun

  3. Özellikler -> Güvenlik'e gidin ve a ve b'nin şu ayarların işaretlendiğinden emin olun: "ClickOnce güvenlik ayarlarını etkinleştir" ve "Bu tam bir güven uygulamasıdır"

  4. Özelliklere gidin -> Yayınla: Yayınlama klasörünün yolunu değiştirmenizi öneririm


0

VS 2019 uygulamamla tamamen aynı sorunu yaşadım.

Uygulamayı manifesto olmadan oluşturmayı denedim, ancak bu işe yaramadı.

Ancak işe yarayan şey şuydu:

  1. Oluştur -> Yayınla -> Uygulama'ya gidin
  2. "Montaj Bilgileri" düğmesine tıklayın
  3. "Montajı COM-Görünür Yap" seçeneğini işaretleyin

Umarım bu yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.