Bij*_*ton 4 msbuild teamcity .net-4.5 visual-studio-2015 .net-4.6
从在Visual Studio 2010和.NET 4.0中构建我们的产品升级到Visual Studio 2015和.NET 4.5.2后,我们发现在客户机器上运行产品时出现问题.
我们看到的错误是System.MissingMethodException在启动应用程序时抛出,从查看此处的帖子指向计算机上安装的.NET版本不正确.现在客户机器安装了.NET 4.5.2,因为这是在我们的产品安装过程中安装的.
我们目前解决问题的方法是在客户机器上安装.NET 4.6.
我有一个理论上我理想地想要确认(最好是垃圾并用更可行的东西代替):
我相信因为.NET 4.6安装在机器上它覆盖了.NET 4.5.2.我不知道为什么会发生这种情况,但我看到一些模糊相似的东西,在安装了.NET 4.5的机器上运行的.NET 4.0应用程序表现了.NET 4.5应用程序在这里的表现(如果是我很确定它不应该).我希望有人能够指出我失踪的东西.
我希望我的理论是错的.
附加信息
当应用程序崩溃时,我设法附加了一个调试器,错误是:
找不到方法:'!! 0 [] System.Array.Empty()'.
我的代码中没有使用Array.Empty()的东西.
堆栈跟踪:
at MyApp.DisplayExceptionInfo(Exception ex)
,位于E:\ Build\MyApp\App.xaml.cs中的MyApp.Main(String [] args):第82行
DisplayExceptionInfo只是尝试显示一个Exception,这让我相信早先抛出异常.
Main检查是否有另一个实例正在通过某个Interop运行(我也尝试删除但它没有解决崩溃),然后创建我的App类并运行它.
更新
对不起我不相信我在问题中提供了足够的细节来帮助解决问题的根源.事实证明,TeamCity使用MSBuild构建Visual Studio解决方案,并且在构建过程中会出现以下警告(令人烦恼的是相当好地隐藏在日志中):
[GetReferenceAssemblyPaths] C:\ Program Files(x86)\ MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1097,5):警告MSB3644:框架".NETFramework,Version = v4.5.2"的引用程序集是未找到.要解决此问题,请为此框架版本安装SDK或Targeting Pack,或者将应用程序重新定位到已安装SDK或Targeting Pack的框架版本.请注意,程序集将从全局程序集缓存(GAC)中解析,并将用于代替引用程序集.因此,您的程序集可能无法正确定位到您想要的框架.
我可以确认我确实安装了.NET 4.5.2多目标包,但我会继续调查
Bij*_*ton 10
经过一天的调查后,似乎MSBuild正在使用.NET 4.6框架构建,因为它无法找到安装的.NET 4.5.2 Framework(尽管安装了Multi-Targeting pack).
感谢此处的其他帖子,有两种可能的解决方案,这两种解决方案都有效:
-p:FrameworkPathOverride="C:\Program Files (x86)\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v4.5.2"我最后选择了2,因为虽然看起来Visual Studio在构建时确实使用了选项1,但是必须指定路径.
| 归档时间: |
|
| 查看次数: |
11836 次 |
| 最近记录: |