我正在使用visual studio 2013构建一个PHP网站。出于测试目的,我在项目根目录中有一个目录文件,它有几万个文件(1000GB)和几千个目录。我的Visual Studio 2013没有响应,因为Solution explorer正在扫描文件目录。
我的第一个想法是从项目but no idea how to do that中排除文件目录。
我的第二个想法是将项目源从Apache文档根目录移动(所有这些文件都在这里)。但是现在我需要在做出一些更改时发布项目或文件(.html,.js)。这非常耗时。有没有办法自动发布文件保存或每次保存复制到不同的文件夹?项目文件和Apache文档根目录都在同一台机器上。
答案 0 :(得分:3)
我知道如何通过Visual Studio 2013 SDK提供的 VSPackage Extensions实现您的期望。您可以开发监听文档的保存事件的扩展,而不是对文件执行任何您喜欢的操作(例如,将其移动到Apache应用程序目录中)。您还可以订阅添加,删除,重命名,打开,打开和关闭事件。
检查此链接: http://msdn.microsoft.com/en-us/library/dn246938.aspx,从如何开始开发VSPackage扩展?部分开始。
按照步骤中的描述创建扩展骨架,测试它,并添加像theese那样的行:
public void OnItemRenamed(EnvDTE.ProjectItem projItem, string oldName)
{
Log("[Event] Renamed " + oldName + " to " + Path.GetFileName(projItem.get_FileNames(1)) + " in project " + projItem.ContainingProject.Name);
//add your logic here
}
public void OnDocumentSaved(Document document)
{
Log("[Event] Saved " + document.Name + " in project " + document.ProjectItem.ContainingProject.Name);
//add your logic here
}
private void OnDocumentOpening(string documentpath, bool @readonly)
{
Log("[Event] Opening " + documentpath );
//add your logic here
}
private void InitEvents() //remember to call it in Initialize()
{
DTE2 dte = (DTE2)GetService(typeof(DTE));
Events2 dteEvents = (Events2)dte.Events;
dteEvents.ProjectItemsEvents.ItemRenamed += OnItemRenamed;
//remember to declare it
_docEvents = dteEvents.DocumentEvents; // defend against Garbage Collector
_docEvents.DocumentOpening += OnDocumentOpening;
_docEvents.DocumentSaved += OnDocumentSaved;
}
我知道这就像拿一把大锤来破解坚果一样,但它是某种解决方案。
我想知道为什么你的项目如此之大?也许它包含大量用户生成的数据(图像/其他文件),可以移动到其他文件夹/机器?如果是(并且您在本地不需要它们),请查看Apache的ProxyPass模块并重定向它们的请求:
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
ProxyPass /foo http://live.example.com/foo
...我希望你有SSD磁盘; - )