通过 EnvDTE 在 C# 中以编程方式添加项目引用(而不是程序集引用)
Posted
技术标签:
【中文标题】通过 EnvDTE 在 C# 中以编程方式添加项目引用(而不是程序集引用)【英文标题】:Adding programmatically in C# a project reference (as opposed to an assembly reference) via EnvDTE 【发布时间】: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 的路径开始我更愿意坚持下去。
【问题讨论】:
【参考方案1】:看起来References 接口有一个处理项目到项目引用的AddProject 方法。
【讨论】:
我相信您还可以通过提供项目名称来使用 Add.References 添加对项目的引用。见blogs.msdn.com/b/murat/archive/2008/07/30/… 收到此错误。 msdn.microsoft.com/en-us/library/ms228768(v=vs.110).aspx 试过解决方案还是不行。【参考方案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 位应用程序的。
【讨论】:
以上是关于通过 EnvDTE 在 C# 中以编程方式添加项目引用(而不是程序集引用)的主要内容,如果未能解决你的问题,请参考以下文章
EnvDTE.DTE 为 Visual Studio 2015 创建空的 C++ 项目
在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码
如果应用程序具有应用程序清单,如何在 C# 中以编程方式获取?