Как добавить новый файл в .csproj
из командной строки?
Как добавить новый файл в файл .csproj без визуальной студии
Ответ 1
Я не думаю, что есть какой-либо инструмент, который будет реагировать на команду "add-project" в командной строке, но я думаю, вам удастся создать программу / script для управления содержимым XML файлов csproj напрямую.
Структура файла csproj выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
<PropertyGroup>
<!-- Properties which affect the build process -->
</PropertyGroup>
<ItemGroup>
<!-- Groups of items to process -->
</ItemGroup>
</Project>
Чтобы добавить файл кода С# в проект, вам просто нужно добавить элемент Compile
в элемент ItemGroup
:
<Compile Include="{relative path to file}" />
Если вы используете существующий файл проекта в качестве шаблона, это должно быть возможно с помощью очень простого XSLT.
Ответ 2
Здесь вы можете легко использовать Linq2Xml. Я включил единый и основанный на списке метод. О, и, как сказал Каспер, вам нужно будет выгрузить проект из VS, прежде чем ваша программа сможет его отредактировать. Затем просто перезагрузите его, когда закончите.
private static void AddFilesToUnitTestProject(FileInfo[] files, string measureBaseDirPath, string measureDataDirSuffix)
{
var unitTestProjectPath = measureBaseDirPath + _unitTestProjectFile;
var unitTestProjectFile = XDocument.Load(unitTestProjectPath);
var itemGroup = unitTestProjectFile.Nodes()
.OfType<XElement>()
.DescendantNodes()
.OfType<XElement>().First(xy => xy.Name.LocalName == "ItemGroup");
foreach (var fileInfo in files)
{
var xelem = AddProjectContent(measureDataDirSuffix + fileInfo.Name, unitTestProjectFile);
itemGroup.Add(xelem);
}
unitTestProjectFile.Save(unitTestProjectPath);
}
private static void AddFileToUnitTestProject(string pathToAdd, string measureBaseDirPath, string measureDataDir)
{
var unitTestProjectPath = measureBaseDirPath + _unitTestProjectFile;
var unitTestProjectFile = XDocument.Load(unitTestProjectPath);
var itemGroup =
unitTestProjectFile.Nodes()
.OfType<XElement>()
.DescendantNodes()
.OfType<XElement>().First(xy => xy.Name.LocalName == "ItemGroup");
var xelem = AddProjectContent(pathToAdd, unitTestProjectFile);
itemGroup.Add(xelem);
unitTestProjectFile.Save(unitTestProjectPath);
}
private static XElement AddProjectContent(string pathToAdd, XDocument doc)
{
XNamespace rootNamespace = doc.Root.Name.NamespaceName;
var xelem = new XElement(rootNamespace + "Content");
xelem.Add(new XAttribute("Include", pathToAdd));
xelem.Add(new XElement(rootNamespace + "CopyToOutputDirectory", "Always"));
return xelem;
}
- Обновлен с помощью метода AddProjectContent
Ответ 3
Выгрузите проект, щелкнув его правой кнопкой мыши в браузере решений. Редактируйте проект, щелкнув правой кнопкой мыши. Добавьте f.ex:
<Compile Include="Properties\AssemblyInfo.cs" />
Ответ 4
.csproj файлы могут использоваться как входные данные в инструмент командной строки MSBuild.
См. ссылку MSBuild:
И, например, этот вопрос.
MSBuild - используйте файл .csproj или сверните свой собственный?
Вы можете просто использовать текстовый редактор, чтобы редактировать их и делать все, что позволяет MSBuild. Если вы вставляете пользовательские действия сборки, Visual Studio может предупредить разработчика при загрузке проекта, который содержит пользовательские действия, в зависимости от того, что вы делаете.