C# 如何以编程方式将项目引用添加到wix项目?
我试图在Wix项目以编程方式创建后添加对该项目的引用。这是Microsoft.VisualStudio.TemplateWizard.IWizard的一个实现。我知道如何为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
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
forVSProject
。尽管这个问题在不久前提出,答案可能与您没有任何关系,但我还是提出了以下解决方案:
假设您有一个表示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
forVSProject
,如您所述)。创建WIX项目时引用的程序集是什么?WIX项目是通过现有的.wixproj模板创建的,它不是以编程方式从头开始创建的。创建WIX项目时引用的程序集是什么?WIX项目是通过现有的.wixproj模板创建的,它不是以编程方式从头开始创建的。创建WIX项目时引用的程序集是什么?WIX项目是通过现有的.wixproj模板创建的,它不是以编程方式从头开始创建的。我认为这会起作用。创建项目后,您可以安全地删除项目、编辑项目并将其重新添加到解决方案中。我会试试这个,然后汇报进展情况。我想这会奏效的。创建项目后,您可以安全地删除项目、编辑项目并将其重新添加到解决方案中。我会试试这个,然后汇报进展情况。我想这会奏效的。创建项目后,您可以安全地删除项目、编辑项目并将其重新添加到解决方案中。我会试试这个,然后汇报进展情况。