我正在尝试部署ClickOnce应用程序,但在客户端上安装失败。这是错误日志:
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是MyProductFrontDesk.exe
,它依赖于MyProductSiteServer.exe
- 这似乎是抛出错误的地方:“清单中的引用与标识不匹配已下载的程序集MyProductSiteServer.exe。“
哪个清单需要纠正?怎么样?
答案 0 :(得分:100)
有an issue with Visual Studio 2008 which is solved by not embedding the default manifest - 该文章的其中一条评论表明问题仍存在于Visual Studio 2010中。
在项目属性中 - > 应用标签 - > 资源 - >复选框图标和清单,设置“使用默认设置嵌入清单”导致问题。将其设置为“创建没有清单的应用程序”可以解决问题。
答案 1 :(得分:44)
当我添加对另一个项目的引用时,我遇到了同样的问题。
解决此问题的方法是在所有引用的项目中启用 ClickOnce安全设置,如Ian解释here(强调我的):
对我来说,解决这个问题的方法是确保解决方案中的所有项目在“项目属性”中公开了“安全选项卡”选项“启用ClickOnce安全设置”勾选选项“这是一个完整的信任应用程序”已选中。这与正确创建清单有关,如果没有在解决方案中需要它的所有项目上设置这些选项,则不会安装应用程序。
我相信这是在同一解决方案下引用另一个项目时修复它的正确方法。
链接的论坛帖子现已过期,但可在归档here上使用。
答案 2 :(得分:35)
我遇到了同样的问题,但我的解决方案却截然不同。
我的ClickOnce应用程序在我的解决方案中引用了另一个EXE文件项目,所以当客户端下载它时,还有另一个EXE文件,那个文件没有清单。
删除对另一个可执行文件的依赖性解决了我的问题。
答案 3 :(得分:9)
我确认Visual Studio 2010中也存在此问题。在“项目属性 - 应用程序 - 资源”中选择“在没有清单的情况下创建应用程序”解决了该问题。
答案 4 :(得分:6)
如果您的项目中的不同DLL文件中引用了两个不同版本的NuGet包,也会发生这种情况。在我的情况下,我使用的是一个名为Catel的框架,我在一个DLL文件中引用了一个比另一个(监督)更新的版本,但是这导致ClickOnce吐出这个错误。引用相同版本解决了问题。
答案 5 :(得分:4)
我遇到了同样的问题,但我的解决方案是改变平台目标'到' x86' (项目属性 - >构建选项卡)。它被设置为Any CPU。一旦我更改了设置并重新发布,ClickOnce安装程序就能完成。
答案 6 :(得分:3)
我有完全相同的问题。我无法删除主项目所需的依赖项。第二个项目是一个控制台项目。
我改为类库,然后一切正常。
答案 7 :(得分:2)
另一种解决方法,如果不能更改与坏应用程序清单的依赖项exe(例如来自NuGet包)。二进制文件可以作为具有虚拟扩展名的内容包含在内,因此ClickOnce不会尝试验证清单,然后在应用程序启动期间重命名。
的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");
}
}
}
答案 8 :(得分:2)
在将项目设置为Debug时进行部署时遇到了同样的错误。当它被更改回Release时没有错误。
答案 9 :(得分:1)
我遇到了同样的问题,我在这里尝试了以前建议的所有解决方案,而且所有这些解决方案都没有用。
我通过更改更新位置来修复它。来自项目属性 - &gt; 发布 - &gt; 更新。将更新位置更改为已发布的文件夹。
答案 10 :(得分:1)
还解决了ClickOnce .exe调用.exe调用.exe。
我也遇到过这个问题,在Visual Studio 2010中使用VB.NET。
我有一个ClickOnce Windows窗体应用程序,它引用第二个Windows窗体应用程序,该应用程序又引用第三个Windows窗体应用程序。 (为简单起见,这些第二和第三个应用程序是EXE文件而不是DLL文件,因为它们同样可以独立运行或通过传递给它们的属性调用。)
我必须同时评论第二和第三个应用程序的清单内容:
Walkthrough: Manually Deploying a ClickOnce Application
效果很好。
答案 11 :(得分:0)
我在Windows 7上使用Visual Studio 2012,需要发布一个由两个项目组成的解决方案。
正如Eduardo指出的那样,将两个项目标记为ClickOnce,并启用完全信任应用程序可以解决问题。
答案 12 :(得分:0)
我有一个不同的问题,我能够解决,所以我想发布。我的问题是我在TFS中运行了3个分支机构。我在我的一个分支机构中升级了Telerik控件,但没有升级其他分支机构。一旦我升级了所有3个分支中的Telerik控件并重新发布它工作,这个错误就消失了。
当时我正在运行VS2015。
答案 13 :(得分:0)
很有趣。我只是重新部署应用程序并解决了问题。可能因网络而导致文件损坏。
答案 14 :(得分:0)
我使用@RestController
public class IndexController implements ErrorController {
@RequestMapping("/")
public String index() {
return "OK";
}
@RequestMapping("/error")
public String error(HttpServletRequest request) {
System.out.println("ERR: " + request.getRequestURL() + " : " + request.getRequestURI());
return "ERR";
}
@Override
public String getErrorPath() {
return "/error";
}
}
生成我的清单。将此添加到我的mage.exe
修复了此问题。您也可以尝试.csproj
compiler flag;我没有测试过它。我没有在Visual Studio 2017中看到stuartd的“在没有清单的情况下创建应用程序”;我认为这就是它的作用。
-nowin32manifest
我在<PropertyGroup>
<NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>
:
.csproj
答案 15 :(得分:0)
如果您有一个引用另一个程序的主程序,则必须对主程序的程序执行“创建没有清单的应用程序”技巧:
项目->属性->应用程序选项卡->资源->清单->下拉“创建没有清单的应用程序”
,然后切换到引用程序的“项目属性”并重复该过程。
答案 16 :(得分:0)
在我的Visual Studio 2017版本中,版本15.6.6(但可能早于该版本)我发现应用程序文件不在右键单击Exe Project and Publish中,而是在Project Properties Publish选项卡下,可以设置要将哪些应用程序文件放入安装中。
所以请排除掉那些有问题的东西。如果要安装此应用程序的计算机上已经安装了某些软件,则没有任何理由尝试重新安装它,除非您需要参考才能运行它。如果要安装PC上已经安装的文件,但是将其安装到其他文件夹,则可能无法正常工作。最好将其他应用程序或dll程序集用于以前安装的位置。
答案 17 :(得分:0)
几分钟前我遇到了同样的问题,下面是我用来解决该问题的步骤。
键
清单
导航到属性->应用程序->资源->检查图标和清单(对于a和b)
导航至属性->构建:确保a和b位于同一目标平台上
导航至属性->安全性,并确保a和b选中了以下设置:“启用ClickOnce安全性设置”和“这是一个完全信任的应用程序”
导航至属性->发布:建议您更改发布文件夹的路径
答案 18 :(得分:0)
我在VS 2019应用程序中遇到了完全相同的问题。
我尝试创建不带清单的应用程序,但这没用。
以下是起作用的:
希望这会有所帮助!
答案 19 :(得分:0)
问题似乎是由vs.2019中的setup.exe引起的。似乎在执行新部署时exe不会更新其版本。对我来说,解决方法是
也项目->属性->应用程序选项卡->资源->清单->下拉“创建没有清单的应用程序”将起作用,但是如果有较新的版本,则该应用程序不会更新我必须回到上面的解决方法。
答案 20 :(得分:0)
我遇到了同样的情况,所以每当你更新一个程序集时,就我而言,我从 CR For .Net framework 4.0 降级到 Framework 2.0,我用旧的替换了所有引用的程序集,该项目运行良好,但为了发布
您必须清洁整个解决方案
然后全部重建,然后发布就可以解决问题。
谢谢