C# 以编程方式添加资产
作为CI构建的一部分,我需要将千兆字节的图像内容拉入我的项目文件,以便将其编译到我的appx中。所包含文件的数据和列表经常更改,因此无法事先将其包含在项目中。再加上庞大的规模,我们的回购协议将变得巨大C# 以编程方式添加资产,c#,visual-studio,msbuild,visual-studio-2015,win-universal-app,C#,Visual Studio,Msbuild,Visual Studio 2015,Win Universal App,作为CI构建的一部分,我需要将千兆字节的图像内容拉入我的项目文件,以便将其编译到我的appx中。所包含文件的数据和列表经常更改,因此无法事先将其包含在项目中。再加上庞大的规模,我们的回购协议将变得巨大 除了打开csproj本身并添加一堆xml来实现这一点之外,还有什么方法可以在构建时实现这一点吗?可能是预构建中运行命令的某些东西?因此,我花了大量时间在这方面,结果表明,简单地使用预构建步骤是行不通的,因为您实际上必须修改csproj文件。简单地使用MakeAppx在编译后无法工作,编译过程实际上
除了打开csproj本身并添加一堆xml来实现这一点之外,还有什么方法可以在构建时实现这一点吗?可能是预构建中运行命令的某些东西?因此,我花了大量时间在这方面,结果表明,简单地使用预构建步骤是行不通的,因为您实际上必须修改csproj文件。简单地使用MakeAppx在编译后无法工作,编译过程实际上会对appxmanifest进行更改 最后,我编写了一个小型控制台应用程序,在调用MSBuild之前在脚本中完成这项工作。我把它包括在下面
private static void AddDirectoryToProject(string sourceDir, Project project)
{
var dir = new DirectoryInfo(sourceDir);
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
var virtualStart = file.FullName.IndexOf("sourcebinaries");
var virtualPath = file.FullName.Substring(virtualStart);
project.AddItemFast("Content", virtualPath, new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("CopyToOutputDirectory", "PreserveNewest")
});
Console.WriteLine(virtualPath);
}
foreach (var subDir in dir.GetDirectories())
{
AddDirectoryToProject(subDir.FullName, project);
}
}
private static void AddDirectoryToProject(字符串sourceDir,Project-Project)
{
var dir=新目录信息(sourceDir);
FileInfo[]files=dir.GetFiles();
foreach(文件中的文件信息文件)
{
var virtualStart=file.FullName.IndexOf(“sourcebinaries”);
var virtualPath=file.FullName.Substring(virtualStart);
AddItemFast(“内容”,virtualPath,新列表()
{
新的KeyValuePair(“CopyToOutputDirectory”、“保留最新”)
});
Console.WriteLine(virtualPath);
}
foreach(dir.GetDirectories()中的var subDir)
{
AddDirectoryTopProject(子目录全名,项目);
}
}
听起来您的图像不应该捆绑到应用程序中,而是在需要时通过web服务或其他方式访问。您使用什么命令来提取文件?您是否尝试将其作为预构建运行?@GlenThomas这是个好主意,但该应用程序是在没有网络连接时使用的应用程序类型。用户可以在有连接时下载内容(首次运行或定期同步),然后该应用程序将在本地存储以供脱机访问