如何在升级到.NET Framework 4.5后使一键发布功能正常工作?

12

我正在使用 Visual Studio 2012 将应用程序从 .NET3.5/EF3.5 升级到 .NET4.5/EF5。

单击发布后运行,但会生成以下警告消息:

  • "Microsoft.Windows.Installer.3.1" 项目未能在'C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\'中找到。
  • '.NET Framework 3.5 SP1' 需要 'Windows Installer 4.5',但未包含在内。

当我尝试安装已发布的版本时,会出现一个对话框,上面写着:

  • 无法启动应用程序
  • 无法下载应用程序。该应用程序缺少必需的文件。请联系应用程序供应商寻求帮助。

在对话框上点击“详细信息...”按钮后,将显示下面的文本(我用“...”替换了我的用户名)

我已经检查了 c:\Program Fiels (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper 是否存在。其中有三个文件夹,分别命名为 "Engine"、"Packages" 和 "Schemas",没有其他内容。

PLATFORM VERSION INFO
Windows             : 6.1.7601.65536 (Win32NT)
Common Language Runtime     : 4.0.30319.18034
System.Deployment.dll       : 4.0.30319.17929 built by: FX45RTMREL
clr.dll             : 4.0.30319.18034 built by: FX45RTMGDR
dfdll.dll           : 4.0.30319.17929 built by: FX45RTMREL
dfshim.dll          : 4.0.41209.0 (Main.041209-0000)

SOURCES
Deployment url          : file:///C:/Users/.../AppData/Local/Microsoft/Windows/Temporary%20Internet%20Files/Content.IE5/56DYV716/Security%20Management%20System.application

ERROR SUMMARY
Below is a summary of the errors, details of these errors are listed later in the log.
* Activation of C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application resulted in exception. Following failure messages were detected:
    + Downloading file:///C:/Users/.../AppData/Local/Microsoft/Windows/Temporary Internet Files/Content.IE5/56DYV716/Security Management System.application did not succeed.
    + Could not find file 'C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application'.
    + Could not find file 'C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application'.
    + Could not find file 'C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application'.

COMPONENT STORE TRANSACTION FAILURE SUMMARY
No transaction error was detected.

WARNINGS
There were no warnings during this operation.

OPERATION PROGRESS STATUS
* [4/9/2013 3:04:00 PM] : Activation of C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application has started.

ERROR DETAILS
Following errors were detected during this operation.
* [4/9/2013 3:04:01 PM] System.Deployment.Application.DeploymentDownloadException (Unknown subtype)
    - Downloading file:///C:/Users/.../AppData/Local/Microsoft/Windows/Temporary Internet Files/Content.IE5/56DYV716/Security Management System.application did not succeed.
    - Source: System.Deployment
    - Stack trace:
        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.DownloadManifestAsRawFile(Uri& sourceUri, String targetPath, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)
        at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestDirectBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)
        at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options)
        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)
    --- Inner Exception ---
    System.Net.WebException
    - Could not find file 'C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application'.
    - Source: System
    - Stack trace:
        at System.Net.FileWebRequest.EndGetResponse(IAsyncResult asyncResult)
        at System.Net.FileWebRequest.GetResponse()
        at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next)
    --- Inner Exception ---
    System.Net.WebException
    - Could not find file 'C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application'.
    - Source: System
    - Stack trace:
        at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)
        at System.Net.FileWebRequest.GetResponseCallback(Object state)
    --- Inner Exception ---
    System.IO.FileNotFoundException
    - Could not find file 'C:\Users\...\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\56DYV716\Security Management System.application'.
    - Source: mscorlib
    - Stack trace:
        at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
        at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
        at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
        at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)
        at System.Net.FileWebStream..ctor(FileWebRequest request, String path, FileMode mode, FileAccess access, FileShare sharing, Int32 length, Boolean async)
        at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)

COMPONENT STORE TRANSACTION DETAILS
No transaction information is available.
2个回答

32

在将项目重定向到.NET 4.5时,我错过了一个步骤。我需要按照以下方式调整先决条件:

  • 打开项目属性窗口。(单击“My Project”)
  • 单击先决条件。
  • 取消选中“.NET Framework 3.5”(或任何其他旧的.NET Framework版本,特别是如果它有这个图标 Yellow triangle with exclamation mark
  • 选中".NET Framework 4.5 (x86和x64)。”
  • 取消选中"Windows Installer 3.1"。
  • 选中"Windows Installer 4.5"。

3
先决条件位于VS2015中的"项目属性"->"发布"。 - Kirsten
在Visual Studio 17中,路径为“我的项目”>“发布”>“先决条件”(按钮)。然后取消选中“Windows Installer 3.1”。 - ConfusionTowers

2
我遇到了这个错误,而且这个解决方案对我有用。我只需要取消选中Windows Installer 3.1并勾选Windows Installer 4.5就可以消除这个警告。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接