.Net 4.0 C# 项目中是不是需要 app.config?

Posted

技术标签:

【中文标题】.Net 4.0 C# 项目中是不是需要 app.config?【英文标题】:Is app.config required in .Net 4.0 C# projects?.Net 4.0 C# 项目中是否需要 app.config? 【发布时间】:2010-09-30 17:33:26 【问题描述】:

令我烦恼的是,当我将目标从 .NET Framework 3.5 更改为 .NET Framework 4.0 时,Visual Studio 2010 将 App.config 文件添加到了我的所有 .EXE 项目中。所以在我签入这些新文件之前,我的自动构建中断了。

我不能删除这些 App.config 文件有什么特别的原因吗?还是 Visual Studio 会继续将它们添加到我的项目中?

我将避免抱怨将无用文件添加到我的项目中的工具。 . .

澄清:

我了解app.config 的用途。我不明白为什么当我将项目更改为面向 .NET 4.0 而不是 .NET 3.5 时,Visual Studio 2010 会将app.config 文件添加到现有项目中。我的应用程序不需要 app.config 中的任何内容即可运行,所以我唯一合理的结论是 Visual Studio 出于某种原因需要 app.config 才能编译,或者有人认为他们比我更了解我的应用程序必须有一个 app.config,即使我不想要。

哎呀...我咆哮了。

进一步说明:

将项目从 Visual Studio 2008 转换为 Visual Studio 2010 不是问题。当我将目标从 .NET Framework 3.5 更改为 .NET Framework 4.0 时,app.config 被添加到项目中。 app.config 包含以下内容:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

当我将它改回目标 .NET Framework 3.5 时,app.config 文件被修改为:

<supportedRuntime version="v2.0.50727"/>

我想我明白他们想要做什么,但自动添加 app.config 文件是个非常糟糕的主意。

【问题讨论】:

【参考方案1】:

我知道 app.config 在 .NET 4 项目中必需的唯一情况是您引用了 CLR-2.0 混合模式程序集。在这种情况下,您需要将 useLegacyV2RuntimeActivationPolicy="true" 添加到启动元素中,否则会在运行时出错。

但是VS转换工具并没有检测到这一点,并且默认添加了一个确实没有必要的app.config文件。如果您能够在转换后运行,这对您来说可能不是问题。

否则,您可以随意删除它(当然,除非您将其用于其他目的)。

【讨论】:

谢谢:“……并且默认添加了一个 app.config 文件,这真的没必要。”咕噜。【参考方案2】:

app.config 文件不是必需的。没有它们,应用程序也能正常运行。

编辑

Reed 指出有一种情况是不正确的,值得注意

在一种情况下需要它 - 如果您的项目引用 CLR 2.0 混合模式程序集,则必须有一个 app.config 文件才能运行

【讨论】:

知道为什么 VS 2010 如此有帮助地在转换后的项目中添加一个吗? 在一种情况下需要它 - 如果您的项目引用 CLR 2.0 混合模式程序集,则必须有一个 app.config 文件才能运行。 @Reed,很有趣。不知道那个。将更新我的答案。 在这种情况下,有没有办法可以将它嵌入到我的 exe 中?我不喜欢仅仅为了支持混合模式程序集而需要外部文件【参考方案3】:

在转换的配置文件中可能需要添加一些设置,如果您创建一个新项目,您不会自动获得app.config

您必须检查其中包含的内容以确定其中是否有需要的内容。

【讨论】:

重点是我的项目中没有app.config,运行正常。不知什么原因,VS 2010在我转换项目的时候添加了一个app.config。所以没有任何需要更改的设置。 不幸的是,转换工具总是添加这个,无论是否有必要。

以上是关于.Net 4.0 C# 项目中是不是需要 app.config?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在面向 .Net 3.5 的项目中使用所有 C# 4.0 功能吗?

C# SSL WebSocket Client 中是不是有.net 4.0?

针对 .NET Framework 3.5 编译的项目允许 C# 4.0 功能

需要(RPC + C# .Net + Framework 4.0)示例 [关闭]

升级到 .NET 4.0 后 C# 动态 JObject 不起作用

将目标框架从 .NET 3.5 更改为 .NET 4.0