Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式将项目引用添加到wix项目?_C#_Visual Studio 2013_Wix - Fatal编程技术网

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

C# 如何以编程方式将项目引用添加到wix项目?,c#,visual-studio-2013,wix,C#,Visual Studio 2013,Wix,我试图在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; te

我试图在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
时,当我尝试使用cast
(VSProject2)projectA.Object时会出现问题,我不确定如何使用WIX sdk dll编辑wixproj文件,但您总是可以通过编程方式编辑wixprojxml。看起来您将向根项目元素添加一个ItemGroup元素。需要注入的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>

定制装配
{233e4372-895b-4c8d-99b0-f8314d907d66}
真的
真的
二进制文件;内容;卫星
安装文件夹

项目guid取自引用项目的csproj。

不确定如何使用WIX sdk DLL编辑wixproj文件,但您始终可以通过编程方式编辑wixproj xml。看起来您将向根项目元素添加一个ItemGroup元素。需要注入的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>

定制装配
{233e4372-895b-4c8d-99b0-f8314d907d66}
真的
真的
二进制文件;内容;卫星
安装文件夹

项目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);
    }
}
void AddProjectReference(
环境项目WIX项目,
环境项目项目(参考)
{
var references=wixProject.ProjectItems
.Cast()
.选择(x=>x.Object)
第()类
.FirstOrDefault();
如果(引用!=null)
{
参考文献。添加项目(项目参考文献);
}
}

因此,使用
VSProject
的不同之处在于如何检索引用实例(使用
VSProject.references
for
VSProject

尽管这个问题在不久前提出,答案可能与您没有任何关系,但我还是提出了以下解决方案:

假设您有一个表示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);
    }
}
void AddProjectReference(
环境项目WIX项目,
环境项目项目(参考)
{
var references=wixProject.ProjectItems
.Cast()
.选择(x=>x.Object)
第()类
.FirstOrDefault();
如果(引用!=null)
{
参考文献。添加项目(项目参考文献);
}
}

因此,使用
VSProject
的区别在于检索引用实例的方式(使用
VSProject.references
for
VSProject
,如您所述)。

创建WIX项目时引用的程序集是什么?WIX项目是通过现有的.wixproj模板创建的,它不是以编程方式从头开始创建的。创建WIX项目时引用的程序集是什么?WIX项目是通过现有的.wixproj模板创建的,它不是以编程方式从头开始创建的。创建WIX项目时引用的程序集是什么?WIX项目是通过现有的.wixproj模板创建的,它不是以编程方式从头开始创建的。我认为这会起作用。创建项目后,您可以安全地删除项目、编辑项目并将其重新添加到解决方案中。我会试试这个,然后汇报进展情况。我想这会奏效的。创建项目后,您可以安全地删除项目、编辑项目并将其重新添加到解决方案中。我会试试这个,然后汇报进展情况。我想这会奏效的。创建项目后,您可以安全地删除项目、编辑项目并将其重新添加到解决方案中。我会试试这个,然后汇报进展情况。