Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式添加资产_C#_Visual Studio_Msbuild_Visual Studio 2015_Win Universal App - Fatal编程技术网

C# 以编程方式添加资产

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在编译后无法工作,编译过程实际上

作为CI构建的一部分,我需要将千兆字节的图像内容拉入我的项目文件,以便将其编译到我的appx中。所包含文件的数据和列表经常更改,因此无法事先将其包含在项目中。再加上庞大的规模,我们的回购协议将变得巨大


除了打开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这是个好主意,但该应用程序是在没有网络连接时使用的应用程序类型。用户可以在有连接时下载内容(首次运行或定期同步),然后该应用程序将在本地存储以供脱机访问