【问题标题】:Adding programmatically in C# a project reference (as opposed to an assembly reference) via EnvDTE通过 EnvDTE 在 C# 中以编程方式添加项目引用(而不是程序集引用)
【发布时间】:2012-07-16 20:00:41
【问题描述】:

在 Visual Studio 中,当您在 .csproj 文件中的解决方案中添加对现有项目的引用时,结果如下:

<ProjectReference Include="..\TestProject2\TestProject2.csproj">
  <Project>{15EC8369-B0C5-4F71-A366-19042F450A2D}</Project>
  <Name>TestProject2</Name>
</ProjectReference>

如果我通过 EnvDTE 添加对程序集 DLL 的引用:

var p = _project as VsProject;
p.References.Add(<path to assembly DLL>);

这样结束:

<Reference Include="TestProject2.csproj">
  <HintPath>..\TestProject2\bin\Debug\TestProject2.csproj.dll</HintPath>
</Reference>

这不是很好,因为如果我切换到发布版本,它仍然会引用调试程序集。另一个问题是我必须先构建引用的程序集,然后才能将其添加为引用。使用 Visual Studio UI,我可以添加对未构建项目的引用。

是否可以通过 EnvDTE API 添加项目引用?

我知道我可以将 .csproj 文件作为 XML 文档进行操作并做任何我想做的事情,但由于我从 EnvDTE 的路径开始我更愿意坚持下去。

【问题讨论】:

    标签: c# visual-studio-2010 envdte project-reference


    【解决方案1】:

    看起来References 接口有一个处理项目到项目引用的AddProject 方法。

    【讨论】:

    【解决方案2】:

    对我有用的是以这种方式制定参考:

    <Reference
      Include="MyDll"
      Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
      <HintPath>..\..\somePath\Debug\myDll.dll</HintPath>
    </Reference>
    <Reference
      Include="MyDll"
      Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
      <HintPath>..\..\somePath\Release\myDll.dll</HintPath>
    </Reference>
    

    这样,release构建引用release依赖,debug构建引用Debug。 当然,如果需要也可以处理x86/x64。这是针对 32 位应用程序的。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多