Visual studio 2010 如何使用MEF部署MSBuild自定义任务?
我有许多用于VisualStudio2010的自定义项和项目模板。 我已经构建了一个VSIX包,可以用来将这些扩展部署到多个开发人员的机器上 我现在正在创建新项模板所需的自定义MSBuild任务 在我的本地项目中,我可以通过在项目文件中输入硬编码路径来实现这一点: 但是,当VSIX包部署到“dev”Visual Studio实例时,这不起作用。 Visual Studio只是报告找不到CustomBuildTask.dll VSIX在哪里部署DLL? 是否有MSBuild%(path)变量可用于在其他计算机上查找DLL, 或者每个用户都必须手动复制DLL和/或将全局“.tasks”文件放入其Visual Studio安装中吗Visual studio 2010 如何使用MEF部署MSBuild自定义任务?,visual-studio-2010,msbuild,mef,vsix,Visual Studio 2010,Msbuild,Mef,Vsix,我有许多用于VisualStudio2010的自定义项和项目模板。 我已经构建了一个VSIX包,可以用来将这些扩展部署到多个开发人员的机器上 我现在正在创建新项模板所需的自定义MSBuild任务 在我的本地项目中,我可以通过在项目文件中输入硬编码路径来实现这一点: 但是,当VSIX包部署到“dev”Visual Studio实例时,这不起作用。 Visual Studio只是报告找不到CustomBuildTask.dll VSIX在哪里部署DLL? 是否有MSBuild%(path)变量可用
注意:MSBuild任务没有与项模板和项目模板相同的VSIX内容类型。我尝试过“VS Package”、“MEF Component”和“Custom Extension Type”,但似乎都不起作用。我不相信您能做到这一点,因为VSIX软件包无法在任意位置安装文件,而且msbuild任务需要放在msbuild文件夹中。visual studio 2017/2019的解决方案,这可能在2010年起作用(当时Microsoft.VisualStudio.TemplateWizard可用),即创建一个向导,并在替换字典中设置扩展安装位置的路径,并将模板中的替换项与UsingTask一起使用
public class ProjectLocationWizard : IWizard
{
public void BeforeOpeningFile(ProjectItem projectItem)
{
}
public void ProjectFinishedGenerating(Project project)
{
}
public void ProjectItemFinishedGenerating(ProjectItem projectItem)
{
}
public void RunFinished()
{
}
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
var wizardDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
replacementsDictionary.Add("$installlocation$", wizardDirectory);
}
public bool ShouldAddProjectItem(string filePath)
{
return true;
}
}
<UsingTask AssemblyFile="$installlocation$\MyTask.dll" TaskName="MyTask" />
公共类ProjectLocationWizard:IWizard
{
打开文件之前的公共无效(ProjectItem ProjectItem)
{
}
公共无效项目完成生成(项目)
{
}
公共无效项目完成生成(项目项目)
{
}
public void RunFinished()
{
}
public void RunStarted(对象自动对象、字典替换Dictionary、向导runKind runKind、对象[]customParams)
{
var wizardDirectory=Path.GetDirectoryName(Assembly.getExecutionGassembly().Location);
replacementsDictionary.Add(“$installlocation$”,向导目录);
}
公共bool ShouldAddProjectItem(字符串文件路径)
{
返回true;
}
}
在全驱动器搜索后,我在以下位置找到了我的DLL:C:\Documents and Settings\\Local Settings\Application Data\Microsoft\Visual Studio\10.0Exp\Extensions\\\\MyCustomTask.DLL这似乎是VSIX部署DLL的位置,但我找不到要在UsingTask AssemblyFile属性中使用的MSBuild变量。我找到了其他信息。你说得对。VSIX完全不支持这一点,文档中说应该使用常规的MSI安装包。请参阅:在“通过MSI安装”一节中,它指出MSBuild组件“必须位于特定的已知位置”,而VSIX不支持该位置。