如何强制使用特定版本的 .net 框架

发布于 2024-08-02 13:02:15 字数 164 浏览 3 评论 0原文

我们的印象是,在解决方案的属性上设置目标框架会限制该应用程序仅使用该框架或以下的功能。但我们刚刚发现,有人可以添加引用并开始使用来自更高版本框架的代码,并且编译器不会抱怨一点。因为我们希望将来防止这种情况发生,所以有人对我如何检测引用更高版本的内容有任何想法吗?如果有人在我们的目标之上添加代码,我需要使构建失败。

We were under the impression that setting the target framework on the properties of a solution would limit that app to using only that framework or below's functionality. We just found out though, that someone can add a reference and start using code from a higher versioned framework and the compiler won't complain one bit. Since we would like to prevent this in the future does anyone have any ideas on how I could detect something referencing a higher version or not? I need to fail the build if someone adds code above our target.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绝不服输 2024-08-09 13:02:15

假设您的目标是 .NET 2.0 及更高版本...如果您在项目的引用中检测到对 System.Core 或其他 3.x 程序集(例如 WPF)的引用,您的构建可能会失败。

更新

您可以首先检查每个 .PROJ 文件中的:

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

然后,在 标记内:

<Reference Include="System.Core">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>

这可能是自定义 NAnt任务或编写自己的解析器来查找这些节点并使构建失败。

Assuming you're targeting .NET 2.0 and above... your build could fail if you detect references to System.Core or other 3.x assemblies (e.g. WPF) in References of your projects.

UPDATE

You could start with checking inside each .PROJ file for:

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Then, inside the <ItemGroup> tag:

<Reference Include="System.Core">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml.Linq">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>

This could be a custom NAnt task or write your own parser to look for these nodes and fail the build.

川水往事 2024-08-09 13:02:15

如果它有效,为什么需要阻止它?只要您不使用任何新功能,我相信就有可能拥有“向前”兼容的 DLL。

Why do you need to prevent this if it works? As long as you don't use any of the new features, I believe it is possible to have "forward" compatible DLLs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文