MATLAB在Visual Studio 2015/TFS中的文件关联

4
我正在使用Visual Studio 2015中的TFS,关于MATLAB文件关联有一个问题。 对于.m文件,没有与MATLAB相关联,如下所示:

Function

令人困惑的是,.fig.mat 文件有一个关联,因此 VS 必须认识 MATLAB "的存在"。如果我双击其中一种文件类型,则会像在资源管理器窗口中打开一样,在 MATLAB 中打开它。这就是我希望 .m 文件的行为。

Figure

作为最低要求,我希望对于 .m 文件能够有 MATLAB 图标以便在文件夹中更容易识别。理想情况下,这些文件也会从 TFS 中打开 MATLAB(而不是 VS 文本编辑器)。我已经尝试了“选项”>“文本编辑器”中的“文件扩展名”选项,但是 MATLAB 不在编辑器列表中。

Options

值得注意的是,我的工作网络对软件安装非常严格,因此外部插件越少越好(最好没有)。欢迎提出建议。

你的意思是你在使用TFS源代码控制管理MATLAB文件?现在你想要将MATLAB与VS集成起来? - Cece Dong - MSFT
你在哪里看到 fig 文件的图标?是在源代码控制资源管理器还是在 Windows 资源管理器中? - Eddie Chen - MSFT
@Eddie-MSFT 在 VS 中的源代码控制资源管理器。.mat 文件也显示正确的图标... - Wolfie
5个回答

1

我经常使用一个实用程序来解决与MATLAB相关文件的操作系统级别关联问题 - associateFiles from FEX

你应该使用associateFiles('deleteadd','.m')来调用它,这将生成一个名为MatlabFileAssocFix.reg的注册表文件,其内容如下(显然,MATLAB路径是根据您的系统生成的):

Windows Registry Editor Version 5.00

;FIXES MATLAB FILE ASSOCIATIONS

;REMOVES M FILE ASSOCIATIONS

[-HKEY_CLASSES_ROOT\.m]

[-HKEY_CLASSES_ROOT\MATLAB.m.9.1.0]

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.m]

;ADD SHELL OPEN

[HKEY_CLASSES_ROOT\Applications\MATLAB.exe\shell\open\command]
@="\"C:\\D\\Program Files\\MATLAB\\R2016b\\bin\\win64\\MATLAB.exe\" \"%1\""

;ADD M FILE ASSOCIATIONS

[HKEY_CLASSES_ROOT\.m]
@="MATLAB.m.9.1.0"
"Content Type"="text/plain"
"PerceivedType"="Text"

[HKEY_CLASSES_ROOT\.m\OpenWithProgids]
"MATLAB.m.9.1.0"=""

[HKEY_CLASSES_ROOT\.m\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"

[HKEY_CLASSES_ROOT\.m\Versions\MATLAB.m.9.1.0]
"FileVersionMS"=dword:00090001
"FileVersionLS"=dword:00000000

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0]
@="MATLAB Code"
"FriendlyTypeName"="@C:\\D\\Program Files\\MATLAB\\R2016b\\bin\\win64\\matlab.exe,-58"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\DefaultIcon]
@="C:\\D\\Program Files\\MATLAB\\R2016b\\bin\\win64\\m.ico,0"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Open]
@="Open"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Open\command]
@="\"C:\\D\\Program Files\\MATLAB\\R2016b\\bin\\win64\\matlab.exe\""

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Open\ddeexec]
@="uiopen('%1',1)"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Open\ddeexec\application]
@="ShellVerbs.Matlab.9.1.0"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Open\ddeexec\topic]
@="system"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Run]
@="Run"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Run\command]
@="\"C:\\D\\Program Files\\MATLAB\\R2016b\\bin\\win64\\matlab.exe\""

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Run\ddeexec]
@="run('%1')"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Run\ddeexec\application]
@="ShellVerbs.Matlab.9.1.0"

[HKEY_CLASSES_ROOT\MATLAB.m.9.1.0\Shell\Run\ddeexec\topic]
@="system"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.m\OpenWithProgids]
"m_auto_file"=hex(0):
"MATLAB.m.9.1.0"=hex(0):

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.m\OpenWithList]
"a"="MATLAB.exe"
"MRUList"="a"

当您导入此文件时,它会删除现有的与.m相关联的任何关联,并将其与MATLAB相关联。
我不知道这是否适用于您的问题,但我认为应该提一下。

不幸的是,这并没有解决我的问题,但感谢提供链接 - 看起来是一个有用的函数要记住! - Wolfie

1

经过很长时间的寻找,我找到了一个合理的解决方法。

你可以为.m文件设置“打开方式”默认值,但是这似乎会为每个文件打开新的MATLAB实例-不太理想!如SACn在下面所建议他们的答案


更好的选择是使用Visual Studio的“外部工具”。 转到“工具”>“外部工具”,然后按照this documentation所示,创建一个新工具。使用以下参数:
Title:     Your Title Here
Command:   cmd.exe
Arguments: /c "$(ItemPath)"

勾选“退出时关闭”。这将使用/c(命令后终止)标志打开命令提示符,并运行您在VS中打开的文件名。在Windows系统上,这将在MATLAB的一个已打开实例中打开该文件,如果不存在,则启动一个新实例。


这可以有多种运行方式… 分配键盘快捷键,从“工具”菜单中运行,将其添加到工具栏,将其添加到上下文菜单中。
现在只需一次点击/按键即可按预期启动一个打开的.m文件。它仍然缺少MATLAB文件关联(以及文件浏览器中对应的图标),但已经完成了主要任务!

0
请注意:MATLAB是用Java编写的,而不是基于.NET或Visual Studio扩展,因此如果我们试图将MATLAB编辑器作为插件打开,现在这不是一个好主意。
现在要编辑.m文件,您必须为文件类型定义新的(外部)默认编辑器
如果没有MATLAB许可证,请使用支持.m文件语法高亮的Notepad ++、Sublime和其他免费编辑器。

我理解这一点,我的问题是如何像我提供的图像中所示那样定义一个新的外部默认编辑器...MATLAB许可证已存在,因此我想要使用它! - Wolfie
可行的解决方案:首先在VS 2015中打开带有.m文件的项目 -> 按Ctrl+O -> 选择所有文件选择任何.m文件,然后*在打开按钮上单击小下拉箭头并单击“使用”按钮将MATLAB添加到列表中。第二步:在解决方案资源管理器中右键单击.m文件->打开方式->现在您将看到MATLAB编辑器->设置为默认值*。 - SACn

-1

如果我理解正确,您想将MATLAB与VS集成(似乎您的问题与TFS无关)。

Visual Studio没有这样的扩展,但Visual Studio Code有一个MatLab扩展

=========================================================================

从评论中看来,您想在MATLAB中使用团队资源管理器,以实现与Team Foundation Version Control的集成。恐怕目前无法满足您的要求。MATLAB不支持团队资源管理器或TFS MSSCCI Provider

我已经在以下网站上提交了用户声音,您可以投票:

https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/18325612-enable-integrated-use-of-team-foundation-version-c


这取决于你所说的"集成"是指什么...我不想在VS中编辑文件,只是使用TFS进行版本控制,并使其与MATLAB更好地通信以打开和显示“.m”文件。我已经看到了Visual Studio代码扩展,但我不需要另一个编辑器... - Wolfie
好的,所以您想在MATLAB中使用团队资源管理器来启用Team Foundation版本控制的集成使用,是吗?恐怕目前无法满足您的要求。MATLAB不支持团队资源管理器或TFS MSSCCI提供程序(https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer20132015M)。我已经在下面的网站上提交了一个用户建议,您可以对其进行投票:https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/18325612-enable-integrated-use-of-team-foundation-version-c。 - Cece Dong - MSFT
感谢您的想法,尽管您可能扩展了我想要的范围。我只是希望能够直接从VS/TFS打开MATLAB,并使我的文件关联起来...没有一个系统与另一个系统的大规模集成。 - Wolfie
没有默认的方法可以直接从TFS打开MATLAB。但是,如果MATLAB支持Team Explorer或TFS MSSCCI提供程序,则您的要求将很容易实现。 - Cece Dong - MSFT

-1

好的,这是我是如何做到的:

我已经安装了VS Code,并且它会在我的默认程序中创建一个关联,就像这样:

enter image description here

然后你可以将你的VS程序指向这个扩展:

enter image description here


我并没有使用VS Code,正如我的问题标题和文本所述,我正在使用Visual Studio 2015... 我还声明了我不想让VS成为默认编辑器,我希望MATLAB成为默认编辑器,并在从TFS/VS打开文件时像MATLAB一样运行。当然,MATLAB已经是“.m”文件的默认程序... - Wolfie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接