如何以编程方式将项目引用添加到wix项目中
本文关键字:项目 引用 添加 wix 编程 方式 | 更新日期: 2023-09-27 17:52:50
我正试图在以编程方式创建Wix项目后添加对该项目的引用。这是在Microsoft.VisualStudio.TemplateWizard.IWizard
的实现中。我知道如何为EnvDTE.Project
的做这件事
// Add project reference for projectA from projectB.
// Allows projectA to use classes from projectB.
var temp = (VSProject2)projectA.Object;
temp.References.AddProject(projectB);
但我不知道如何为OAWixProject
做这件事。如有任何帮助,我们将不胜感激。非常感谢。
编辑:我应该提到,当projectA
是OAWixProject
时,当我尝试转换(VSProject2)projectA.Object
时会出现问题。
不确定如何使用WIX-sdk-dll来编辑wixproj文件,但您总是可以通过编程来编辑wixproj-xml。看起来您要将ItemGroup元素添加到根Project元素中。您需要注入的xml看起来像:
<ItemGroup>
<ProjectReference Include="..'MySolution'CustomAssembly.csproj">
<Name>CustomAssembly</Name>
<Project>{233e4372-895b-4c8d-99b0-f8314d907d66}</Project>
<Private>True</Private>
<DoNotHarvest>True</DoNotHarvest>
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
</ProjectReference>
</ItemGroup>
项目guid取自引用项目的csproj。
虽然这个问题是不久前提出的,而且答案可能不再与您相关,但我提出了以下解决方案:
假设你有一个代表WiX项目的EnvDTE.Project
,并且你想添加对另一个EnvDTE.Project
的引用,那么就不需要转换为OAWixProject
类型或使用它:
void AddProjectReference(
EnvDTE.Project wixProject,
EnvDTE.Project projectToReference)
{
var references = wixProject.ProjectItems
.Cast<EnvDTE.ProjectItem>()
.Select(x => x.Object)
.OfType<VSLangProj.References>()
.FirstOrDefault();
if (references != null)
{
references.AddProject(projectToReference);
}
}
因此,与使用VSProject
的区别在于如何检索引用实例(如您所述,使用VSProject.References
代替VSProject
(。