Удалить VS2010 ссылки на удаленные файлы в веб-проекте - PullRequest
9 голосов
/ 07 февраля 2012

Я пошел за спиной VS2010 и удалил некоторые изображения из папки изображений, на которую веб-проект ссылается как на Контент. В навигаторе решений эти файлы теперь отображаются с желтым значком предупреждения о том, что файл не найден. Обновление папки не имеет никакого эффекта. Есть ли способ сказать VS2010, чтобы автоматически синхронизировать папку? Проект веб-сайта VS делает это по умолчанию.

Ответы [ 5 ]

2 голосов
/ 17 сентября 2015

У меня только что была эта проблема в VS 2015. Файлы отсутствовали по всему веб-проекту, поэтому я не хотел искать их все.

Самый быстрый путь домой: исключить все файлы / папки , а затем включить их все снова.

То есть:

  1. обозреватель решений -> выберите все файлы и папки -> щелкните правой кнопкой мыши -> "Исключить из проекта"
  2. обозреватель решений -> нажмите«Показать все файлы»
  3. обозреватель решений -> выбрать все файлы и папки -> щелкнуть правой кнопкой мыши -> «Включить в проект»
2 голосов
/ 25 июня 2017

Я создал скрипт PowerShell для решения этой проблемы.

function ExtractInclude ($line)
{
    if ($line  -like  '*Content Include=*') {
        return $line.Split('"') | select -Skip 1 | select -First 1
    }
}

function RemoveMissingInclude ([string]$path, [bool]$report) {
    $reader = [System.IO.File]::OpenText($path)
    $projectPath = (Split-Path $path) + "/"

    try {
        for() {
            $line = $reader.ReadLine()
            if ($line -eq $null) { break }

            $pathInclude = ExtractInclude($line)

            if ($report) {
                if ($pathInclude -ne "") {
                    if (-not (Test-Path "$projectPath$pathInclude")) { $pathInclude }
                } 
            } else {
                if ($pathInclude -ne "") {
                    if (Test-Path "$projectPath$pathInclude") { $line }
                } else {
                    $line
                }
           }
        }
    }
    finally {
        $reader.Close()
    }
}

Просто запустите следующее, чтобы создать очищенный файл проекта:

RemoveMissingInclude -path "D:\path\name.csproj" | Out-File D:\path\nameClean.csproj

Дополнительную информацию можно найти в этом посте: http://devslice.net/2017/06/remove-missing-references-visual-studio/

2 голосов
/ 07 февраля 2012

В Visual Studio перейдите к отсутствующим файлам, выберите их и нажмите del (или щелкните правой кнопкой мыши и выберите Delete).

Сохраните проект, и все готово.

Как вы заметили, это не автоматически - файл проекта должен быть синхронизирован с реальной файловой системой. Это не происходит с веб-сайтами «проекты», потому что нет файла проекта.

0 голосов
/ 22 ноября 2018

Отвечая в ноябре 2018 года, когда кто-то вроде меня может столкнуться с этой проблемой.

Проблема:

Я создал резервные копии некоторых папок в проекте.

Из-за того, что файлы являются копиями исходных файлов, были ссылки на определения функций.

И теперь, когда я пытаюсь открыть определение функции из вызова функции, открывается папка из резервной копии.

После удаления папок резервного копирования появляется сообщение об ошибке: xyz.php файл не найден, создайте его.

Решение:

Перейти кпапка в Проводнике,

Нажмите значок Обновить.

Перезапустите код Visual Studio.

0 голосов
/ 06 декабря 2017

Я сделал очень простое консольное приложение для этого:

using System;
using System.IO;
using System.Collections.Generic;

namespace CleanProject
{
    class Program
    {
        static void Main(string[] args)
        {
            var newFile = new List<string>();
            if (args.Length == 0)
            {
                Console.WriteLine("Please specify the project full path as an argument");
                return;
            }

            var projFile = args[0];
            if (!File.Exists(projFile))
            {
                Console.WriteLine("The specified project file does not exist: {0}", projFile);
                return;
            }

            if (!projFile.ToLowerInvariant().EndsWith(".csproj"))
            {
                Console.WriteLine("The specified does not seem to be a project file: {0}", projFile);
                return;
            }

            Console.WriteLine("Started removing missing files from project:", projFile);

            var newProjFile = Path.Combine(Path.GetDirectoryName(projFile), Path.GetFileNameWithoutExtension(projFile) + ".Clean.csproj");
            var lines = File.ReadAllLines(projFile);
            var projectPath = Path.GetDirectoryName(projFile);
            for(var i = 0; i < lines.Length; i++)
            {
                var line = lines[i];
                if (!line.Contains("<Content Include=\"") && !line.Contains("<None Include=\""))
                {
                    newFile.Add(line);
                }
                else
                {
                    var start = line.IndexOf("Include=\"") + "Include=\"".Length;
                    var end = line.LastIndexOf("\"");
                    var path = line.Substring(start, end - start);
                    if (File.Exists(Path.Combine(projectPath, path)))
                    {
                        newFile.Add(line);
                    }
                    else
                    {
                        if (!line.EndsWith("/>")) // I'm assuming it's only one line inside the tag
                            i += 2;
                    }
                }
            }
            File.WriteAllLines(newProjFile, newFile);

            Console.WriteLine("Finished removing missing files from project.");
            Console.WriteLine("Cleaned project file: {0}", newProjFile);
        }
    }
}

https://github.com/woodp/remove-missing-project-files

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...