问题标签 [multitargeting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
538 浏览

wpf - 创建面向鼠标和面向触摸的 WPF 应用程序的最佳实践

需要开发同时支持鼠标和触摸输入的 WPF 应用程序。我正在寻找一种能够维护单个代码库并最大程度地减少实现它的痛苦的方法。一些框架或构建配置可能 - 类似于项目链接器 + 预处理器指令方案,用于在单个项目中多目标 WPF 和 Silverlight 平台。提前致谢。
编辑 示例场景:应用程序具有允许用户将多张照片上传到服务器的控件。文件选择框支持鼠标拖拽,也支持一些手势来添加新文件。

0 投票
1 回答
500 浏览

c# - Visual Studio 2012 .NET 多目标和异步回调

我有一个使用 .NET Framework 3.5 的 .NET 应用程序,用 C# 编写。应用程序正在使用 BeginInvoke 异步调用委托。该应用程序在使用 Visual Studio 2012 RC 编译时工作正常,但在使用 Visual Studio 2010 SP1 编译时会冻结(主线程卡在 WaitOne 中等待异步委托完成,但它们从不执行)。

虽然错误可能是错误设计的同步,但令我惊讶的是为什么它在 VS 2012 中有效而在 VS 2010 中无效,而我在两者中都针对相同的框架版本。

在 Visual Studio for .NET 中如何实现多目标?当针对相同的框架版本时,是否应该期望可执行行为相同,或者是否存在某些部分(编译器前端或运行时库的某些部分),这取决于所使用的 Visual Studio 版本?

0 投票
2 回答
1023 浏览

visual-studio - 调试针对框架 4.0 的项目时会加载框架 4.5 程序集

我需要能够使用 Visual Studio 2012 以 .NET Framework 4.0 为目标,并验证我的代码在部署到我们的 4.0 环境 (Windows Server 2003) 时是否能够正常工作。

Visual Studio 2012 中的多目标功能似乎可以正常工作,但仅适用于mscorlib.dll. 当引用任何其他框架 DLL 时,编译时会出现正确的错误,例如引用 4.0 中不存在的类型,但 DLL 的 4.5 版本在执行和调试期间加载。

考虑到 4.5 版本框架所做的就地升级中的重大更改,这使得无法验证我的代码是否可以在生产环境中正常工作。

我做了一些单元测试,通过执行MSDN上的 4.0 和 4.5 之间的一些差异来测试多目标功能。这些测试包含在他们自己的项目中,这些项目针对他们正在测试的框架版本。所有测试都应该通过。

针对 MSCORLIB 的测试

这些测试成功通过,List<string>位于mscorlib.dll

框架 4.0: -通过-

框架 4.5: -通过-

针对其他框架 DLL 的测试

然而,这些测试不能正常工作(4.5 一个通过,4.0 一个不通过),因为这些类型被发现System.ComponentModel.Composition.dll并且总是加载 4.5 版本:

框架 4.0 - 失败,抛出 4.5- 预期的异常

框架 4.5 -通过-

这是设计好的吗?考虑到 mscorlib 的 4.0 版本已加载但每个其他程序集的 4.5 版本似乎是不相交的。

有没有办法获得我想要的功能?

更新

这是我正在使用的解决方案/项目。

0 投票
2 回答
667 浏览

visual-studio-2010 - VS2010 原生多目标

我的 Win7 开发机器上安装了 VS2005、VS2008 和 VS2010。我有一个使用 3rd 方 DLL 的特定项目,当 EXE 项目由 VS2010 构建时(在针对 v100 或 v90 工具集时),它在 LoadLibrary() 调用期间出现异常。当直接由 VS2005 或 VS2008 构建时,它可以完美运行.

根据李绍(微软)2009年的博客文章:

http://blogs.msdn.com/b/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx

我应该能够打开 VS2010 项目并将平台工具集从 v100 更改为 v90,然后 VS2010 将实际使用 VS2008 编译器、头文件和库来构建程序。如果是,那么它就不是“正确”的,因为当以这种方式构建项目时,DLL 将不会加载。我尝试查看构建日志以验证使用了哪个编译器,但我的日志中没有路径或版本号,所以这是失败的。

这是一个直接写入 Win32Apis 的纯 C(不是 C++,不是 MFC,不是 .NET)项目。有什么办法可以让这个工作,还是我只是为单个项目使用不同的编译器(在整个系统的 100 多个项目中)?

帮助!

0 投票
1 回答
572 浏览

c# - 在单个二进制文件中定位多个 .NET 框架?

的背景:

我有一个应用程序需要在其安装的 .NET 框架范围从 2.0 一直到 4.5 的客户端上运行。此应用程序必须能够对大量文件(在特定情况下超过 200k 个离散文件)进行枚举和执行操作。

为了构建文件索引,应用程序当前使用System.IO.DirectoryInfo.GetFiles()。这会影响性能,因为处理组件必须等待整个路径树被索引才能开始工作。由于一些过时的磁带多加载器和一些编写不佳的固件,遍历某些目录可能会触发从磁带读取 - 将处理时间从几十秒缩短到几十分钟。

.NET 4.0 提供了System.IO.Directory.EnumerateFiles(Path)方法,可以缓解这个问题。然而,只有少数 datter 控制台已升级到 4.0+,我们要求进行现代化改造的请求遭到了敌意。

问题:

是否可以在单个二进制文件中同时实现 GetFiles 和 EnumerateFiles 的方法?实际上,这将是针对 .NET 2.0 的单个二进制文件,如果在运行时确定 4.0 框架可用,则能够调用 .NET 4.0 方法。

在提到之前:更换数据不是我们客户的选择。我试过了。我有没有试过。

0 投票
4 回答
660 浏览

c# - .NET 中的多目标

浏览了各种博客后,我对“多目标”或并行执行的术语感到非常困惑。

  1. 一些博客说,并行执行意味着一个进程中有两个版本的 CLR。其他一些人声称,它就像 .net 2.0 和 .net 3.0 程序集并排执行。我非常失望,我不确定谁对谁错。

  2. 我还在许多博客中看到,比如 Scott Hanselman 的博客等(这让我很困惑),如果目标框架是 4.0,.NET 4.5 的任何功能都将不起作用。我可以同意。但是我不能同意或理解这样一个事实,即如果我使用 4.5 构建它并在 4.0 中部署,4.0 的一个功能在 4.5 中已修复,它将隐藏。这里我不理解“隐藏”这个词,也没有人敢解释它的真正含义。这意味着运行时错误?这意味着编译时错误?不可能是这个。这意味着不一致的行为?例外 ?如果是这样,我想知道为什么 MS 让这种类型的灵活性在 VS 中进行开发。它有什么用途吗?我明白,第一种情况是有意义的,但不理解或不同意第二种情况。

  3. 我还在 Rick/Scott Hanselman 的帖子中看到,重大更改意味着,包括 CLR 在内的完整升级。然后,我应该将 3.0 视为主要升级,但不是因为它仍然使用 .NET 2.0 CLR。那为什么命名术语是 3.0.xx/3.5.xx ?就像 .NET 4.0.30319.x 中的情况一样,其中 CLR 也是新的,所以我同意这一点。我很惊讶谁是正确的。这些人或 MSDN 都违背了他们的原则(就像 MSDN 说格式为 Major.Minor.Build.Revision,而 Hanselman 或其他人说,Major 意味着 CLR 升级,而它不在 .NET 3.0 中)

参考:http ://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

http://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

对以上两个问题有什么想法吗?

0 投票
2 回答
3836 浏览

msbuild - 是否有推荐的方法来使用 MSBuild 在 TeamCity 中配置针对多个框架的 NuGet 包?

我已经阅读了一些帖子(请参阅下面的参考资料),但尚未找到针对我的技术堆栈的最佳实践指南。

目标:通过 TeamCity 使用 MSBuild 和 NuGet,创建针对多个 .NET 框架的单个 NuGet 包。

约束:

  1. 仅从 VCS 中提取代码一次。
  2. 所有编译的程序集的版本应该相同。
  3. 单个 .csproj(不是每个目标框架一个)。

我有两种方法:

  1. 创建单个构建配置。它将包含三个构建步骤:编译 .NET 3.5、编译 .NET 4.0、使用 NuGet 打包。每个构建步骤都将取决于最后一步的成功。我在这种方法中看到的唯一真正问题(希望有一个我不知道的解决方案)是每个构建步骤都需要自己的一组构建参数(例如,system.TargetFrameworkVersion 和 system.OutputPath)来指定DLL 所在的唯一位置(例如 bin\release\v3.5 和 bin\release\v4.0),以便 NuGet 打包步骤能够根据 .nuspec 文件中的 Files 部分执行其操作。

  2. 创建多个构建配置。每个上述构建步骤的一个构建配置。使用这种方法,很容易解决 TargetFrameworkVersion 和 OutputPath 构建参数问题,但我现在必须创建快照依赖项并在构建之间共享程序集版本号。它还占用了构建配置槽,这对我们来说是可以的(但不是最佳的),因为我们确实有企业许可证。

选项#1 似乎是显而易见的选择。选项#2 感觉很脏。

所以我的两个问题是:

  1. 是否可以创建构建步骤独有的参数?
  2. 有第三种更好的方法吗?

参考:

  1. 多框架 NuGet 构建,带有用于内部依赖管理的符号
  2. Nuget - 用多个项目打包一个解决方案(针对多个框架)
  3. http://lostechies.com/joshuaflanagan/2011/06/23/tips-for-building-nuget-packages/
  4. http://msdn.microsoft.com/en-us/library/hh264223.aspx
  5. https://stackoverflow.com/a/1083362/607701
  6. http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters
  7. http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package
0 投票
1 回答
234 浏览

windows-phone-7 - 解决方案设置多目标 Windows Phone 应用程序

我需要编写一个与 WP 7.5/7.8 和 WP 8 兼容的 windows phone 应用程序。

现在我必须如何设置我的解决方案以针对这两个平台?

我已经创建了一个用于访问数据的类库。

编辑

如何创建包含与 WP7.X 兼容的应用程序版本和仅与 WP8 兼容但在商店中有一个应用程序的另一个版本的 Windows Phone Projec?

0 投票
1 回答
96 浏览

nuget - 如何最好地在同一个库中支持多个版本的 .net

我正在 Visual Studio 2015 中创建一个 .net 库,其目标如下:-

  1. 支持 .net 2、3.5、4 和 4.5+
  2. PCL 支持 (.net 4.5+)
  3. 除了 Json.net 没有额外的依赖

理想情况下,.net 4.5+ 版本的库将使用异步,并包含返回任务等的方法

现在似乎有很多不同的方式来支持我想做的事情,尤其是在 Visual Studio 2015/project.json 版本中,但是今天从头开始有什么好的方法呢?

我的库相对简单,所以尽管我想重用代码,但我不想损害 .net 4.5 版本。

什么是合理的项目结构,这意味着我可以利用最新的 .net 框架,但仍然构建对旧框架的支持。

0 投票
1 回答
199 浏览

c# - 在 Visual Studio 2010 中更改目标框架

我有一个包含很多项目的解决方案,我用其他技术重写了一个项目,为此我不得不将目标框架从 .NET 3.5 更改为 .NET 4.0。我所有的其他项目都在 .NET 3.5 中

现在我的参考资料似乎都不再起作用了。我有 2k “您是否缺少 using 指令或程序集引用?”-错误

我查看了我在其他项目中的引用,我更改的那个上有一个黄色的感叹号,看起来有点像这样:

我想成为傲慢的人

我尝试再次添加引用,一些错误消失了,但那个小感叹号仍然存在

难道我做错了什么?我怎样才能摆脱那个感叹号?在一个解决方案中拥有不同的 .Net 版本是不是很糟糕?如果我的参考文献正确,它会起作用吗?