Ошибка "NullReferenceException была необработанной", возникающая при доступе к SourceControl через C#
Вот мой кусок кода, через который я пытаюсь получить доступ к TFS Server SourceControl:
TeamFoundationServer tfs = new TeamFoundationServer("http://test-server:8080/tfs/CollectionName");
VersionControlServer sourceControl = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
RecursionType recursion = RecursionType.OneLevel;
Item[] items = null;
ItemSet itemSet = sourceControl.GetItems("$/Product/", recursion);
items = itemSet.Items;
Но то, что я получаю, это ноль на sourceControl
когда я отлаживаю код. Мой путь к TFS-серверу также правильный, я не получаю значения в переменной sourceControl
3 ответа
Ваш сервер не может быть найден:
TeamFoundationServer.GetService
метод возвращает Null
если услуга не может быть найдена.
Смотрите: MSDN Документация
Убедитесь, что программа может получить доступ к порту (проверьте брандмауэр и попробуйте telnet
в test-server:8080
)
Более того, как предлагалось в комментариях, TeamFoundationServer.EnsureAuthenticated
метод, может помочь указать, когда URI недействителен.
Вы попробуйте следующие строки кода. Что приведет вас к диалоговому окну, чтобы выбрать онлайн-проекты TFS. Если какие-либо онлайн-проекты доступны внутри, выберите проект и нажмите кнопку "Подключиться". В случае успеха вы должны получить экземпляр VersionControlServer, в противном случае система, на которую реагирует система, действительна, поскольку у вас нет сетевых проектов для подключения.
TfsTeamProjectCollection _tpc = null;
using (var picker = new TeamProjectPicker(TeamProjectPickerMode.NoProject, false))
{
if (picker.ShowDialog() == DialogResult.OK)
{
_tpc = picker.SelectedTeamProjectCollection;
}
if (_tpc == null)
{
MessageBox.Show("Please select a team project.");
return;
}
var versionControl = (VersionControlServer)_tpc.GetService(typeof(VersionControlServer));
Вместо того, чтобы писать жестко закодированный путь Tfs, попробуйте следующий код, который ищет все онлайн-проекты TFS.
List<RegisteredProjectCollection> projectCollections = new List<RegisteredProjectCollection>((RegisteredTfsConnections.GetProjectCollections()));
// filter down to only those collections that are currently on-line
var onlineCollections =
from collection in projectCollections
where collection.Offline == false
select collection;
// fail if there are no registered collections that are currently on-line
if (onlineCollections.Count() < 1)
{
Console.Error.WriteLine("Error: There are no on-line registered project collections");
Environment.Exit(1);
}
// find a project collection with at least one team project
foreach (var registeredProjectCollection in onlineCollections)
{
var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(registeredProjectCollection);
Workspace workspace = null;
Boolean createdWorkspace = false;
String newFolder = String.Empty;
try
{
var versionControl = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));
var teamProjects = new List<TeamProject>(versionControl.GetAllTeamProjects(false));
//.......
}
}