【问题标题】:Modify .NET project files and reference properties修改 .NET 项目文件和引用属性
【发布时间】:2012-08-16 20:09:14
【问题描述】:

我正在开发一个应用程序 (C#),它将从多个 csproj 文件中读取项目属性/引用(以及引用的属性),并修改它们的值。

但是,在那些 csproj 文件中找不到像“copy-local”这样的引用属性(单击引用时在属性资源管理器中看到的属性)。有没有办法可以访问它们并以编程方式修改它们的值?

【问题讨论】:

  • 那些文件是 XML,太好了……
  • 我知道。我使用 Microsoft.Build.Evaluation API 来解析它们并获取属性和引用。但是,这些 XML 文件 (.csproj) 没有引用属性(我的意思是当您单击引用时您在属性资源管理器中看到的属性)。我想访问这些属性。

标签: c# .net visual-studio msbuild


【解决方案1】:

一切都在 XML 项目文件中 - 没有其他任何地方可以提供这些信息,而且它必须在某个地方,对吧?

这是我快速为您完成的示例。对于框架程序集,Copy Local 默认为 true。当您将Copy Local 设置为false 时,您将获得一个名为private 的XML 元素,该元素本身被设置为false。

在此示例中,System.Core 设置为 Copy Local = false

<Reference Include="System.Core">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
  <Private>True</Private>
</Reference>
<Reference Include="System.Web" />

【讨论】:

  • 这看起来像我想要的。我会尝试一下……如果出现其他任何问题,我会添加到线程中。非常感谢!
  • 如果“private”字段默认为false,则不会显示在xml中。如果我想访问 CopyLocal 属性,请检查它是否为真/假,如果为真则将其设置为假......我该怎么做?简而言之,我怎样才能检查和/或重置属性的值(以编程方式)而不必覆盖它?
  • 您只需检查private 节点是否存在并且其值为true。试试看 - 如果你不能再看看 XML 操作,或者问另一个问题。
  • 您在回答中给出的示例是错误的(我认为是错字)。对于框架程序集,Copy Local 的默认值将是 false,并且 XML 中不会有 &lt;private&gt; 标记。但是,如果更改了值,则会将 &lt;private&gt; 标记添加到 XML 中,其值与 Copy Local 相同。所以如果Copy Localfalse&lt;private&gt; 也将是false(或者标签会丢失)。注意:对于非框架程序集,Copy Local 的默认值为 true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多