在尝试添加对VSIX的引用时,它通常会从.csproj中的引用中提取它.但是,如果引用不在.csproj中,因为它们现在位于project.json文件中,那么它们不会被拉到vsix.然后解决方案可以编译,但是当安装到Visual Studio中时,扩展会因"找不到文件"错误而失败(因为未复制到VSIX的程序集).
我尝试使用清单的部分,如下所示:
<Asset Type="Microsoft.VisualStudio.Assembly" d:Source="Project" d:ProjectName="*PROJECTNAME*" Path="|*ASSEMBLYNAME*|" AssemblyName="|*ASSEMBLYNAME*;AssemblyName|" />
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为它无法识别包引用.
经过一些研究后,我看到了与PCL类似的问题,但是,没有答案而且问题类型不同:MEF With Portable Class library using Microsoft Composition MEF2抛出文件未找到异常
在同一个注释中,这似乎是一个可接受的解决方法:VSIX与项目模板和NuGet包,但据我所知,它意味着在安装过程中使用该包.除此之外,它不适用于我们的情况,因为他们需要指定包版本,我们正在使用project.json,所以我们可以使用浮动版本(即:2.0.*)
有没有办法引用这个project.json引用我们缺少的?也许是一种解决方法?我发现的解决方案似乎都需要在某处"粘贴"de DLL,对于浮动版本来说并不方便.
提前感谢任何帮助或输入.
编辑/更新:由于VSIX会自动推送CSPROJ中引用的任何程序集(而不是项目本身),因此尝试在项目级别获取DLL似乎不太可能.经过多次尝试,我认为有效的解决方法是从输出文件夹中获取程序集.但是,据我所知,VSIX没有办法做到这一点,还是做到了?
我在VS2013下使用VSIX Manifest Designer.我添加了Microsoft.VisualStudio.Pro产品标识符和[10.0,13.0]版本范围来安装目标.尽管如此,我仍然没有看到我的VS2010 Professional作为可用的安装目标:
source.extension.vsixmanifest文件内容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="ae98c9e5-8e14-4c92-b45a-c4fd24a49123" Version="1.0" Language="en-US" Publisher="whosoever" />
<DisplayName>MyExtension</DisplayName>
<Description xml:space="preserve">whosoever</Description>
<MoreInfo>http://www.myextension.com</MoreInfo>
<License>LICENSE.txt</License>
<Icon>icon.png</Icon>
<PreviewImage>screenshot.png</PreviewImage>
</Metadata>
<Installation InstalledByMsi="false">
<InstallationTarget Version="[10.0,13.0)" Id="Microsoft.VisualStudio.Pro" />
</Installation>
<Dependencies>
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="4.5" />
<Dependency Id="Microsoft.VisualStudio.MPF.11.0" DisplayName="Visual Studio MPF 11.0" d:Source="Installed" Version="11.0" />
</Dependencies>
<Assets>
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
</Assets>
</PackageManifest>
Run Code Online (Sandbox Code Playgroud)
应该更改什么才能将此扩展安装到VS2010,2012和2013?
我正在为我的项目创建一个自定义测试运行器.所以我创建了一个可以在Visual Studio中注册的测试vsix项目.
我也知道我通过F5加载扩展,然后加载了Visual Studio的实验实例,但是在我创建了我的vsix的Visual Studio实例中没有命中断点.
有人知道如何真正调试它吗?
我正在构建 VSIX 项目并看到以下错误消息:
VSSDK1311 vsixmanifest 必须包含“PackageManifest:Installation:InstallTarget:ProductArchitecture”的值。
我需要做什么来解决这个问题?
标题说明了一句:如何"提取".vsix文件?
我正在关注一个教程,并将其作为步骤说明,但我不理解它并且它不易于谷歌.
我创建了一个 ItemTemplate 项目。我想将其安装到自定义文件夹中。当我手动将从项目构建的 zip 文件添加到 ItemTemplates 内我的命名文件夹时,效果很好。
我现在使用两个项目,原始的 ItemTemplate 项目和用于安装的 VSIX 项目。
我面临的问题是,当使用 VSIX 项目安装模板时,安装路径会在我的自定义文件夹中添加一个名为 CSharp 的额外文件夹。仅当我将 ItemTemplate 项目作为项目添加到 VSIX 项目时,才会发生这种情况。如果我将 ItemTemplates 项目的输出(zip 文件)添加到 VSIX 项目,则模板位于正确的位置。
已使用 vsixmanifest.xml 中的资产部分将 ItemTemplate 项目添加为 VSIX 项目中的参考项目。下图中的属性是 VSIX 项目的引用部分中 ItemTemplate 项目的属性。
如果有帮助的话,这是我在 ItemTemplate 项目中使用的 vstemplate 文件。
<?xml version="1.0" encoding="utf-8"?>
<VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" xmlns:sdk="http://schemas.microsoft.com/developer/vstemplate-sdkextension/2010">
<TemplateData>
<Name>Generator</Name>
<Description></Description>
<Icon>Magic.Generator.ico</Icon>
<TemplateID>Magic.Generator</TemplateID>
<TemplateGroupID>Magic</TemplateGroupID>
<ProjectType>CSharp</ProjectType>
<RequiredFrameworkVersion>2.0</RequiredFrameworkVersion>
<NumberOfParentCategoriesToRollUp>2</NumberOfParentCategoriesToRollUp>
<DefaultName>Generator.cs</DefaultName>
</TemplateData>
<TemplateContent>
<ProjectItem ReplaceParameters="false">Generator.cs</ProjectItem>
</TemplateContent>
</VSTemplate>
Run Code Online (Sandbox Code Playgroud)
我正在使用 VS2017 (15.7.4) 如有任何帮助,我们将不胜感激,谢谢。