如何以编程方式将项目引用添加到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做这件事。如有任何帮助,我们将不胜感激。非常感谢。

编辑:我应该提到,当projectAOAWixProject时,当我尝试转换(VSProject2)projectA.Object时会出现问题。

如何以编程方式将项目引用添加到wix项目中

不确定如何使用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(。