Exemple #1
0
        public static void Main(string[] args)
        {
            // Create dictionary of strings
            Dictionary <string, string> strings = new Dictionary <string, string> {
                { "en:hello", "Hello World!" }
            };

            #region Snippet
            // Create AssetBuilder
            IAssetBuilder builder = new AssetBuilder();
            // Add IAssetSource that adds cache
            builder.AddCache();
            // Add IAssetSource that adds strings
            builder.AddStrings(strings, LineParameterPrinter.Default);
            #endregion Snippet

            // Instantiate IAsset
            IAsset asset = builder.Build();

            // Create string key
            ILine key = new LineRoot().Key("hello").Culture("en");
            // Request string
            IString value = asset.GetLine(key).GetString();
            // Print result
            Console.WriteLine(value);
        }
Exemple #2
0
        public void Apply(PolusShipStatus shipStatus)
        {
            if (!MapHandler.Load())
            {
                return;
            }

            MapData      map     = MapHandler.GetMap();
            PolusHandler polus   = new PolusHandler(shipStatus);
            AssetBuilder builder = new AssetBuilder(polus);

            polus.ClearTasks();
            polus.MoveToTemp();

            for (int i = 0; i < map.objs.Length; i++)
            {
                MapAsset asset   = map.objs[i];
                bool     success = builder.Build(asset);
                if (!success)
                {
                    LILogger.LogError("Failed to build " + asset.name);
                }
                else if (i % 1000 == 0)
                {
                    LILogger.LogMsg(i + " - Objects");
                }
            }

            polus.DeleteTemp();
            LILogger.LogInfo("Applied Map Data");
        }
Exemple #3
0
        private static async Task VerifyOptionSetsAsync(Workspace workspace, string language)
        {
            var assetBuilder = new AssetBuilder(workspace.CurrentSolution);
            var serializer   = new Serializer(workspace.Services);

            var asset = assetBuilder.Build(workspace.Options, language, CancellationToken.None);

            using (var stream = SerializableBytes.CreateWritableStream())
                using (var writer = new ObjectWriter(stream))
                {
                    await asset.WriteObjectToAsync(writer, CancellationToken.None).ConfigureAwait(false);

                    stream.Position = 0;
                    using (var reader = new ObjectReader(stream))
                    {
                        var recovered        = serializer.Deserialize <OptionSet>(asset.Kind, reader, CancellationToken.None);
                        var assetFromStorage = assetBuilder.Build(recovered, language, CancellationToken.None);

                        Assert.Equal(asset.Checksum, assetFromStorage.Checksum);

                        // option should be exactly same
                        Assert.Equal(0, recovered.GetChangedOptions(workspace.Options).Count());
                    }
                }
        }
Exemple #4
0
    // 内部构建方法
    private static void BuildInternal(BuildTarget buildTarget)
    {
        Debug.Log($"[Build] 开始构建补丁包 : {buildTarget}");

        // 打印命令行参数
        int  buildVersion = GetBuildVersion();
        bool isForceBuild = IsForceBuild();

        Debug.Log($"[Build] Version : {buildVersion}");
        Debug.Log($"[Build] 强制重建 : {isForceBuild}");

        // 创建AssetBuilder
        AssetBuilder builder = new AssetBuilder(buildTarget, buildVersion);

        // 设置配置
        builder.CompressOption          = AssetBuilder.ECompressOption.ChunkBasedCompressionLZ4;
        builder.IsForceRebuild          = isForceBuild;
        builder.IsAppendHash            = false;
        builder.IsDisableWriteTypeTree  = false;
        builder.IsIgnoreTypeTreeChanges = true;

        // 执行构建
        builder.PreAssetBuild();
        builder.PostAssetBuild();

        // 构建成功
        Debug.Log("[Build] 构建完成");
    }
Exemple #5
0
        public static Asset <TValue> Add <TValue>(AssetBuilder <TValue> value, bool replace = true)
        {
            Asset <TValue> asset = value.Finish();

            Add(asset, replace);
            return(asset);
        }
    public void DrawGUI()
    {
        //一键打AB包
        if (GUILayout.Button("增量打包", GUILayout.Height(40)))
        {
            if (EditorUtil.ShowDialog("提示", "确定要开始增量打包吗?"))
            {
                AssetBuilder.ExcuteBuild();
            }
        }

        //一键打AB包
        if (GUILayout.Button("全量打包", GUILayout.Height(40)))
        {
            if (EditorUtil.ShowDialog("提示", "确定要开始全量打包吗?"))
            {
                string exportPath = Application.streamingAssetsPath;
                if (Directory.Exists(exportPath))
                {
                    Directory.Delete(exportPath, true);
                }
                AssetBuilder.ExcuteBuild();
            }
        }
    }
Exemple #7
0
        public static void Main(string[] args)
        {
            #region Snippet
            // Create dictionary of strings
            Dictionary <string, string> strings = new Dictionary <string, string> {
                { "en:hello", "Hello World!" }
            };

            // Create IAssetSource that adds cache
            IAssetSource assetSource_0 = new AssetCacheSource(c => c.AddResourceCache().AddStringsCache().AddCulturesCache());
            // Create IAssetSource that static reference of IAsset (string dictionary)
            IAssetSource assetSource_1 = new AssetInstanceSource(new StringAsset(strings, LineParameterPrinter.Default));

            // Create AssetBuilder
            IAssetBuilder builder = new AssetBuilder(assetSource_0, assetSource_1);
            // Instantiate IAsset
            IAsset asset = builder.Build();

            // Create string key
            ILine key = new LineRoot().Key("hello").Culture("en");
            // Request value
            IString value = asset.GetLine(key).GetString();
            // Print result
            Console.WriteLine(value);
            #endregion Snippet
        }
        public async Task AssetBiulder_NonExistentFileRequested()
        {
            var options = new WebOptimizerOptions();
            var asset   = new Mock <IAsset>().SetupAllProperties();

            asset.Setup(a => a.GenerateCacheKey(It.IsAny <HttpContext>())).Throws <FileNotFoundException>();


            StringValues values;
            var          response = new Mock <HttpResponse>().SetupAllProperties();

            response.Setup(r => r.Headers.Keys).Returns(new string[] { });
            var context = new Mock <HttpContext>().SetupAllProperties();

            context.Setup(s => s.Request.Headers.TryGetValue("Accept-Encoding", out values)).Returns(false);
            context.Setup(c => c.Response).Returns(response.Object);
            context.Setup(c => c.Request.Path).Returns("/nonexist_file.css");

            var cache = new Mock <IMemoryCache>();

            var store   = new Mock <IAssetResponseStore>();
            var logger  = new Mock <ILogger <AssetBuilder> >();
            var env     = new Mock <IWebHostEnvironment>().SetupAllProperties();
            var builder = new AssetBuilder(cache.Object, store.Object, logger.Object, env.Object);
            var result  = await builder.BuildAsync(asset.Object, context.Object, options).ConfigureAwait(false);

            Assert.Null(result);
        }
Exemple #9
0
 /// <summary>
 /// 读取配置
 /// </summary>
 private static void LoadSettingsFromPlayerPrefs(AssetBuilder builder)
 {
     builder.CompressOption          = EditorTools.PlayerGetEnum <AssetBuilder.ECompressOption>(StrEditorCompressOption, AssetBuilder.ECompressOption.Uncompressed);
     builder.IsForceRebuild          = EditorTools.PlayerGetBool(StrEditorIsForceRebuild, false);
     builder.IsAppendHash            = EditorTools.PlayerGetBool(StrEditorIsAppendHash, false);
     builder.IsDisableWriteTypeTree  = EditorTools.PlayerGetBool(StrEditorIsDisableWriteTypeTree, false);
     builder.IsIgnoreTypeTreeChanges = EditorTools.PlayerGetBool(StrEditorIsIgnoreTypeTreeChanges, false);
 }
Exemple #10
0
 /// <summary>
 /// 存储配置
 /// </summary>
 private static void SaveSettingsToPlayerPrefs(AssetBuilder builder)
 {
     EditorTools.PlayerSetEnum <AssetBuilder.ECompressOption>(StrEditorCompressOption, builder.CompressOption);
     EditorTools.PlayerSetBool(StrEditorIsForceRebuild, builder.IsForceRebuild);
     EditorTools.PlayerSetBool(StrEditorIsAppendHash, builder.IsAppendHash);
     EditorTools.PlayerSetBool(StrEditorIsDisableWriteTypeTree, builder.IsDisableWriteTypeTree);
     EditorTools.PlayerSetBool(StrEditorIsIgnoreTypeTreeChanges, builder.IsIgnoreTypeTreeChanges);
 }
        static LineRoot()
        {
            var _culturePolicy = new CulturePolicy();
            var _builder       = new AssetBuilder.OneBuildInstance();

            builder  = _builder;
            instance = new LineRoot.Mutable(LineAppender.NonResolving, _builder.Asset, _culturePolicy, Localization.StringFormat.StringResolver.Default);
            dynamic  = instance;
        }
        public async Task AssetBuilder_NoMemoryCache()
        {
            byte[] cssContent = "*{color:red}".AsByteArray();

            var pipeline = new AssetPipeline();
            var options  = new WebOptimizerOptions()
            {
                EnableMemoryCache = false
            };
            var asset = new Mock <IAsset>().SetupAllProperties();

            asset.SetupGet(a => a.ContentType).Returns("text/css");
            asset.SetupGet(a => a.Route).Returns("/file.css");
            asset.Setup(a => a.GenerateCacheKey(It.IsAny <HttpContext>())).Returns("cachekey");
            asset.Setup(a => a.ExecuteAsync(It.IsAny <HttpContext>(), options))
            .Returns(Task.FromResult(cssContent));

            StringValues values;
            var          response = new Mock <HttpResponse>().SetupAllProperties();

            response.Setup(r => r.Headers.Keys).Returns(new string[] { });
            var context = new Mock <HttpContext>().SetupAllProperties();

            context.Setup(s => s.Request.Headers.TryGetValue("Accept-Encoding", out values)).Returns(false);
            context.Setup(c => c.Response).Returns(response.Object);
            context.Setup(c => c.Request.Path).Returns("/file.css");

            var next = new Mock <RequestDelegate>();
            var env  = new Mock <IHostingEnvironment>().SetupAllProperties();

            env.Setup(e => e.ContentRootPath).Returns(@"D:\Project\");

            object bytes;
            var    cache = new Mock <IMemoryCache>();

            cache.Setup(c => c.TryGetValue(It.IsAny <string>(), out bytes)).Throws <InvalidOperationException>();

            var store = new Mock <IAssetResponseStore>();

            var member = pipeline.GetType().GetField("_assets", BindingFlags.NonPublic | BindingFlags.Instance);

            member.SetValue(pipeline, new List <IAsset> {
                asset.Object
            });

            var amo = new Mock <IOptionsSnapshot <WebOptimizerOptions> >();

            amo.SetupGet(a => a.Value).Returns(options);

            var logger  = new Mock <ILogger <AssetBuilder> >();
            var builder = new AssetBuilder(cache.Object, store.Object, logger.Object, env.Object);

            var result = await builder.BuildAsync(asset.Object, context.Object, options).ConfigureAwait(false);

            Assert.Equal(cssContent, result.Body);
        }
Exemple #13
0
        public void PreBuild(PolusShipStatus shipStatus)
        {
            // Load Map and AssetDB
            if (!AssetDB.Import())
            {
                return;
            }
            if (!MapHandler.Load())
            {
                return;
            }

            // Vars
            map     = MapHandler.GetMap();
            polus   = new PolusHandler(shipStatus);
            builder = new AssetBuilder(polus);
            MinimapGenerator.Reset();

            // Rooms
            LILogger.LogInfo("...Building Rooms");
            for (int i = 0; i < map.objs.Length; i++)
            {
                if (map.objs[i].type != "util-room")
                {
                    continue;
                }
                MapAsset asset   = map.objs[i];
                bool     success = builder.PreBuild(asset);
                if (!success)
                {
                    LILogger.LogError("Failed to build " + asset.name);
                }
            }

            // Objects
            LILogger.LogInfo("...Building Objects");
            for (int i = 0; i < map.objs.Length; i++)
            {
                if (map.objs[i].type == "util-room")
                {
                    continue;
                }
                MapAsset asset   = map.objs[i];
                bool     success = builder.PreBuild(asset);
                if (!success)
                {
                    LILogger.LogError("Failed to build " + asset.name);
                }
                else if (i % 100 == 0 && i != 0)
                {
                    LILogger.LogInfo("..." + i + " Objects Built");
                }
            }
        }
Exemple #14
0
            private async Task AddGlobalAssetsAsync(CancellationToken cancellationToken)
            {
                var snapshotService = _workspace.Services.GetService <ISolutionChecksumService>();
                var assetBuilder    = new AssetBuilder(_workspace.CurrentSolution);

                foreach (var reference in _analyzerService.GetHostAnalyzerReferences())
                {
                    var asset = await assetBuilder.BuildAsync(reference, cancellationToken).ConfigureAwait(false);

                    snapshotService.AddGlobalAsset(reference, asset, cancellationToken);
                }
            }
Exemple #15
0
        public async Task AssetBuilder_NoDiskCache()
        {
            byte[] cssContent = "*{color:red}".AsByteArray();

            var pipeline = new AssetPipeline();
            var options  = new WebOptimizerOptions()
            {
                EnableDiskCache = false
            };
            var asset = new Mock <IAsset>().SetupAllProperties();

            asset.SetupGet(a => a.ContentType).Returns("text/css");
            asset.SetupGet(a => a.Route).Returns("/file.css");
            asset.Setup(a => a.GenerateCacheKey(It.IsAny <HttpContext>())).Returns("cachekey");
            asset.Setup(a => a.ExecuteAsync(It.IsAny <HttpContext>(), options))
            .Returns(Task.FromResult(cssContent));

            StringValues values;
            var          response = new Mock <HttpResponse>().SetupAllProperties();

            response.Setup(r => r.Headers.Keys).Returns(new string[] { });
            var context = new Mock <HttpContext>().SetupAllProperties();

            context.Setup(s => s.Request.Headers.TryGetValue("Accept-Encoding", out values)).Returns(false);
            context.Setup(c => c.Response).Returns(response.Object);
            context.Setup(c => c.Request.Path).Returns("/file.css");

            var next = new Mock <RequestDelegate>();
            var env  = new Mock <IWebHostEnvironment>().SetupAllProperties();

            env.Setup(e => e.ContentRootPath).Returns(@"D:\Project\");

            var mco = new Mock <IOptions <MemoryCacheOptions> >();

            mco.SetupGet(o => o.Value).Returns(new MemoryCacheOptions());
            var cache = new MemoryCache(mco.Object);

            AssetResponse ar;
            var           store = new Mock <IAssetResponseStore>();

            store.Setup(s => s.TryGet(It.IsAny <string>(), It.IsAny <string>(), out ar)).Throws <InvalidOperationException>();

            pipeline._assets = new ConcurrentDictionary <string, IAsset>();
            pipeline._assets.TryAdd(asset.Object.Route, asset.Object);

            var logger  = new Mock <ILogger <AssetBuilder> >();
            var builder = new AssetBuilder(cache, store.Object, logger.Object, env.Object);

            var result = await builder.BuildAsync(asset.Object, context.Object, options).ConfigureAwait(false);

            Assert.Equal(cssContent, result.Body);
        }
Exemple #16
0
        public void EmptyAssetChecksumTest()
        {
            var document     = new AdhocWorkspace().CurrentSolution.AddProject("empty", "empty", LanguageNames.CSharp).AddDocument("empty", SourceText.From(""));
            var assetBuilder = new AssetBuilder(document.Project.Solution);

            var source   = assetBuilder.Build(document.State, document.GetTextAsync().Result, CancellationToken.None);
            var metadata = assetBuilder.Build(new MissingMetadataReference(), CancellationToken.None);
            var analyzer = assetBuilder.Build(new AnalyzerFileReference("missing", new MissingAnalyzerLoader()), CancellationToken.None);

            Assert.NotEqual(source.Checksum, metadata.Checksum);
            Assert.NotEqual(source.Checksum, analyzer.Checksum);
            Assert.NotEqual(metadata.Checksum, analyzer.Checksum);
        }
Exemple #17
0
        private static Asset BuildAsset(AssetBuilder builder, string kind, object value)
        {
            switch (kind)
            {
            case WellKnownChecksumObjects.AnalyzerReference:
                return(builder.Build((AnalyzerReference)value, CancellationToken.None));

            case WellKnownChecksumObjects.MetadataReference:
                return(builder.Build((MetadataReference)value, CancellationToken.None));

            default:
                throw ExceptionUtilities.UnexpectedValue(kind);
            }
        }
            private void AddGlobalAssets(CancellationToken cancellationToken)
            {
                using (Logger.LogBlock(FunctionId.RemoteHostClientService_AddGlobalAssetsAsync, cancellationToken))
                {
                    var snapshotService = _workspace.Services.GetService <ISolutionChecksumService>();
                    var assetBuilder    = new AssetBuilder(_workspace.CurrentSolution);

                    foreach (var reference in _analyzerService.GetHostAnalyzerReferences())
                    {
                        var asset = assetBuilder.Build(reference, cancellationToken);
                        snapshotService.AddGlobalAsset(reference, asset, cancellationToken);
                    }
                }
            }
Exemple #19
0
        public async Task Missing_Analyzer_Serailization_Test()
        {
            var workspace = new AdhocWorkspace();
            var reference = new AnalyzerFileReference("missing_reference", new MissingAnalyzerLoader());

            var serializer   = new Serializer(workspace.Services);
            var trees        = new ChecksumTreeCollection();
            var assetBuilder = new AssetBuilder(trees.CreateRootTreeNode(workspace.CurrentSolution.State));

            // make sure this doesn't throw
            var assetFromFile    = assetBuilder.Build(reference, CancellationToken.None);
            var assetFromStorage = await CloneAssetAsync(serializer, assetBuilder, assetFromFile).ConfigureAwait(false);

            var assetFromStorage2 = await CloneAssetAsync(serializer, assetBuilder, assetFromStorage).ConfigureAwait(false);
        }
        public void Can_get_data_from_all_assets_with_debugging_enabled()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Path("f/1.js").Data("abc123").Build();
            var a2 = builder.Path("f/2.js").Data("def456").Build();
            var a3 = builder.Path("f/3.js").Data("ghi789").Build();

            var p = this.CreatePackage(new[] { a1, a2, a3 }, isDebugging: true);

            // Act
            var d = p.GetAllData();

            // Assert
            Assert.AreEqual("$abc123-f/1.js$\r\n$def456-f/2.js$\r\n$ghi789-f/3.js$\r\n", d);
        }
        public void Should_add_templates_to_keyed_by_stripping_the_file_extension()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Path("tmpl/A.jst").Data("<h1 />").Build();
            var a2 = builder.Path("views/B.jst").Data("<h2 />").Build();

            var config = new TemplateConfiguration("JST", "tmpl", "jst");
            var tmpl = this.CreateTemplateAsset(config, a1, a2);

            // Act
            var data = tmpl.GetData();

            // Assert
            Assert.IsTrue(data.Contains("ns[\"tmpl/A\"] = lazyTemplate('<h1 />');"));
            Assert.IsTrue(data.Contains("ns[\"views/B\"] = lazyTemplate('<h2 />');"));
        }
        public void Should_not_add_template_asset_if_no_templates_exist()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Data("abc123").Path("content/scripts/1.js").Build();
            var a2 = builder.Data("def456").Path("content/scripts/2.js").Build();
            var a3 = builder.Data("ghi789").Path("content/scripts/3.js").Build();

            // Act
            var package = this.CreatePackage(new List<IAsset>() { a1, a2, a3 }, "jst");

            // Assert
            Assert.AreEqual(3, package.Assets.Count());
            Assert.AreEqual("content/scripts/1.js", package.Assets.First().Path);
            Assert.AreEqual("content/scripts/2.js", package.Assets.Skip(1).First().Path);
            Assert.AreEqual("content/scripts/3.js", package.Assets.Skip(2).First().Path);
        }
Exemple #23
0
        public async Task MetadataReference_RoundTrip_Test()
        {
            var hostServices = MefHostServices.Create(
                MefHostServices.DefaultAssemblies.Add(typeof(Host.TemporaryStorageServiceFactory.TemporaryStorageService).Assembly));

            var workspace = new AdhocWorkspace(hostServices);
            var reference = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);

            var serializer   = new Serializer(workspace.Services);
            var trees        = new ChecksumTreeCollection();
            var assetBuilder = new AssetBuilder(trees.CreateRootTreeNode(workspace.CurrentSolution.State));

            var assetFromFile    = assetBuilder.Build(reference, CancellationToken.None);
            var assetFromStorage = await CloneAssetAsync(serializer, assetBuilder, assetFromFile).ConfigureAwait(false);

            var assetFromStorage2 = await CloneAssetAsync(serializer, assetBuilder, assetFromStorage).ConfigureAwait(false);
        }
        public void Can_use_custom_name_casing()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Path("tMpL/A.jst").Data("<h1 />").Build();
            var a2 = builder.Path("VIEWS/b.jst").Data("<h2 />").Build();

            var config = new TemplateConfiguration("JST", "tmpl", "jst");
            config.NameCasing = p => p.ToLower();
            var tmpl = this.CreateTemplateAsset(config, a1, a2);

            // Act
            var data = tmpl.GetData();

            // Assert
            Assert.IsTrue(data.Contains("ns[\"tmpl/a\"] = lazyTemplate('<h1 />');"));
            Assert.IsTrue(data.Contains("ns[\"views/b\"] = lazyTemplate('<h2 />');"));
        }
Exemple #25
0
        private static async Task <Asset> CloneAssetAsync(Serializer serializer, AssetBuilder assetBuilder, Asset asset)
        {
            using (var stream = SerializableBytes.CreateWritableStream())
                using (var writer = new ObjectWriter(stream))
                {
                    await asset.WriteObjectToAsync(writer, CancellationToken.None).ConfigureAwait(false);

                    stream.Position = 0;
                    using (var reader = new ObjectReader(stream))
                    {
                        var recovered        = serializer.Deserialize <object>(asset.Kind, reader, CancellationToken.None);
                        var assetFromStorage = BuildAsset(assetBuilder, asset.Kind, recovered);

                        Assert.Equal(asset.Checksum, assetFromStorage.Checksum);
                        return(assetFromStorage);
                    }
                }
        }
        public void Should_escape_single_quotes_for_asset_data()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Path("a.jst").Data("<a href='#' />").Build();
            var a2 = builder.Path("b.jst").Data("<a href=\\'#\\' />").Build();
            var a3 = builder.Path("c.jst").Data("<a href=\"#\" />").Build();

            var config = new TemplateConfiguration("JST", "tmpl", "jst");
            var tmpl = this.CreateTemplateAsset(config, a1, a2, a3);

            // Act
            var data = tmpl.GetData();

            // Assert
            Assert.IsTrue(data.Contains("ns[\"a\"] = lazyTemplate('<a href=\\'#\\' />');"));
            Assert.IsTrue(data.Contains("ns[\"b\"] = lazyTemplate('<a href=\\\\'#\\\\' />');"));
            Assert.IsTrue(data.Contains("ns[\"c\"] = lazyTemplate('<a href=\"#\" />');"));
        }
    /// <summary>
    /// 遍历文件
    /// </summary>
    /// <param name="path"></param>
    /// <param name="dirPaths"></param>
    /// <param name="abNames"></param>
    /// <param name="resPaths"></param>
    /// <param name="ai"></param>
    public static void ListFiles(string path, List <string> dirPaths, List <string> abNames, Dictionary <string, ResPathInfo> resPaths, Dictionary <string, AssetBundleInfo> dependences, AssetImporter ai = null)
    {
        if (path.Contains(".meta"))
        {
            return;
        }
        if (AssetBuilder.IsIgnore(path))
        {
            return;
        }
        string assetPath = EditorUtil.GetAssetsPath(path);

        if (ai == null)
        {
            ai = AssetImporter.GetAtPath(assetPath);
        }
        if (ai == null)
        {
            return;
        }
        string fileName  = Path.GetFileNameWithoutExtension(path);
        string extension = Path.GetExtension(path);

        if (IsMarked(ai))
        {
            if (abNames.IndexOf(ai.assetBundleName) == -1)
            {
                abNames.Add(ai.assetBundleName);
            }
            AddDependences(dependences, ai);
        }
        if (resPaths.ContainsKey(fileName))
        {
            var    info    = resPaths[fileName];
            string oldPath = string.Format("{0}/{1}{2}", dirPaths[info.resPathIndex], info.resName, info.extension);
            Debug.LogErrorFormat("资源名重复:{0}===>{1}", path, oldPath);
        }
        else
        {
            resPaths.Add(fileName, new ResPathInfo(fileName, extension, dirPaths.Count - 1, abNames.Count - 1));
        }
    }
        public void Should_remove_common_prefixes()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Path("tmpl/a.jst").Data("<h1 />").Build();
            var a2 = builder.Path("tmpl/b.jst").Data("<h1 />").Build();
            var a3 = builder.Path("tmpl/c.jst").Data("<h1 />").Build();
            var a4 = builder.Path("tmpl/test/d.jst").Data("<h1 />").Build();

            var config = new TemplateConfiguration("JST", "tmpl", "jst");
            var tmpl = this.CreateTemplateAsset(config, a1, a2, a3, a4);

            // Act
            var data = tmpl.GetData();

            // Assert
            Assert.IsTrue(data.Contains("ns[\"a\"] = lazyTemplate('<h1 />');"));
            Assert.IsTrue(data.Contains("ns[\"b\"] = lazyTemplate('<h1 />');"));
            Assert.IsTrue(data.Contains("ns[\"c\"] = lazyTemplate('<h1 />');"));
            Assert.IsTrue(data.Contains("ns[\"test/d\"] = lazyTemplate('<h1 />');"));
        }
    /// <summary>
    /// 遍历目录
    /// </summary>
    /// <param name="path"></param>
    /// <param name="dirPaths"></param>
    /// <param name="abNames"></param>
    /// <param name="resPaths"></param>
    /// <param name="ai"></param>
    public static void ListDirectories(string path, List <string> dirPaths, List <string> abNames, Dictionary <string, ResPathInfo> resPaths, Dictionary <string, AssetBundleInfo> dependences, AssetImporter ai = null)
    {
        if (AssetBuilder.IsIgnore(path))
        {
            return;
        }
        string        assetPath = EditorUtil.GetAssetsPath(path);
        List <string> files     = EditorUtil.GetFiles(path, "*", SearchOption.TopDirectoryOnly);

        if (files.Count > 0 && dirPaths.IndexOf(assetPath) == -1)
        {
            dirPaths.Add(assetPath);
        }
        if (ai == null)
        {
            ai = AssetImporter.GetAtPath(assetPath);
        }
        if (IsMarked(ai))
        {
            if (abNames.IndexOf(ai.assetBundleName) == -1)
            {
                abNames.Add(ai.assetBundleName);
            }
            AddDependences(dependences, ai);
        }
        else
        {
            ai = null;
        }
        for (int i = 0; i < files.Count; i++)
        {
            ListFiles(files[i], dirPaths, abNames, resPaths, dependences, ai);
        }
        List <string> directories = EditorUtil.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);

        for (int i = 0; i < directories.Count; i++)
        {
            ListDirectories(directories[i], dirPaths, abNames, resPaths, dependences, ai);
        }
    }
Exemple #30
0
    private void InitInternal()
    {
        if (_assetBuilder != null)
        {
            return;
        }

        _centerStyle           = new GUIStyle(GUI.skin.GetStyle("Label"));
        _centerStyle.alignment = TextAnchor.UpperCenter;
        _leftStyle             = new GUIStyle(GUI.skin.GetStyle("Label"));
        _leftStyle.alignment   = TextAnchor.MiddleLeft;

        // 创建AssetBuilder
        Version     appVersion   = new Version(Application.version);
        int         buildVersion = appVersion.Revision;
        BuildTarget buildTarget  = EditorUserBuildSettings.activeBuildTarget;

        _assetBuilder = new AssetBuilder(buildTarget, buildVersion);

        // 读取配置
        LoadSettingsFromPlayerPrefs(_assetBuilder);
    }
        public void Can_get_data_from_individual_asset()
        {
            Action<bool> getAssetDataTest = (bool isDebugging) =>
            {
                // Arrange
                var builder = new AssetBuilder();
                var a1 = builder.Path("content/1.js").Data("abc123").Build();
                var a2 = builder.Path("ContenT/2.js").Data("def456").Build();

                var p = this.CreatePackage(new[] { a1, a2 }, isDebugging);

                // Act/Assert
                Assert.AreEqual("$abc123-content/1.js$", p.GetAssetData("content/1.js"));
                Assert.AreEqual("$def456-ContenT/2.js$", p.GetAssetData("cONTENt/2.js"));
                Assert.IsNull(p.GetAssetData("non-existant-path/3.js"));
            };

            // Should return same results when debugging is enabled/disabled.
            // Only preprocessing should execute.
            getAssetDataTest(false);
            getAssetDataTest(true);
        }
        private Asset GetOptionsAsset(Solution solution, string language, CancellationToken cancellationToken)
        {
            // TODO: we need better way to deal with options. optionSet itself is green node but
            //       it is not part of snapshot and can't save option to solution since we can't use language
            //       specific option without loading related language specific dlls
            var options = solution.Options;

            // we have cached options
            ValueTuple <OptionSet, Asset> value;

            if (_lastOptionSetPerLanguage.TryGetValue(language, out value) && value.Item1 == options)
            {
                return(value.Item2);
            }

            // otherwise, we need to build one.
            var assetBuilder = new AssetBuilder(solution);
            var asset        = assetBuilder.Build(options, language, cancellationToken);

            _lastOptionSetPerLanguage[language] = ValueTuple.Create(options, asset);
            return(asset);
        }
        public void Should_aggregate_template_assets()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Path("content/scripts/1.js").Build();
            var a2 = builder.Path("content/scripts/2.js").Build();
            var a3 = builder.Path("content/tmpl/1.jst").Build();
            var a4 = builder.Path("content/tmpl/2.jst").Build();

            // Act
            var package = this.CreatePackage(new List<IAsset>() { a1, a2, a3, a4 }, "jst");

            // Assert
            Assert.AreEqual(3, package.Assets.Count());
            Assert.AreEqual("content/scripts/1.js", package.Assets.First().Path);
            Assert.AreEqual("content/scripts/2.js", package.Assets.Skip(1).First().Path);

            var tmplAsset = package.Assets.Skip(2).First();
            Assert.IsTrue(tmplAsset.Path.StartsWith("templates/"));
            Assert.IsTrue(tmplAsset.Path.EndsWith(".js"));
            Assert.IsInstanceOfType(tmplAsset, typeof(TemplateAsset));
        }
    private void InitInternal()
    {
        if (_assetBuilder != null)
        {
            return;
        }

        _centerStyle           = new GUIStyle(GUI.skin.GetStyle("Label"));
        _centerStyle.alignment = TextAnchor.UpperCenter;
        _leftStyle             = new GUIStyle(GUI.skin.GetStyle("Label"));
        _leftStyle.alignment   = TextAnchor.MiddleLeft;

        // 创建构建器类
        Version     appVersion   = new Version(Application.version);
        int         buildVersion = appVersion.Revision;
        BuildTarget buildTarget  = EditorUserBuildSettings.activeBuildTarget;
        string      packPath     = EditorPrefs.GetString(StrEditorPackingPath, PatchDefine.StrMyPackRootPath);

        _assetBuilder = new AssetBuilder();
        _assetBuilder.InitAssetBuilder(buildTarget, buildVersion, packPath);

        // 读取配置
        LoadSettingsFromPlayerPrefs(_assetBuilder);
    }
Exemple #35
0
 public void Setup()
 {
     _assetBuilder = new AssetBuilder();
 }
            private void AddGlobalAssets(CancellationToken cancellationToken)
            {
                using (Logger.LogBlock(FunctionId.RemoteHostClientService_AddGlobalAssetsAsync, cancellationToken))
                {
                    var snapshotService = _workspace.Services.GetService<ISolutionChecksumService>();
                    var assetBuilder = new AssetBuilder(_workspace.CurrentSolution);

                    foreach (var reference in _analyzerService.GetHostAnalyzerReferences())
                    {
                        var asset = assetBuilder.Build(reference, cancellationToken);
                        snapshotService.AddGlobalAsset(reference, asset, cancellationToken);
                    }
                }
            }
 private static Asset BuildAsset(AssetBuilder builder, string kind, object value)
 {
     switch (kind)
     {
         case WellKnownChecksumObjects.AnalyzerReference:
             return builder.Build((AnalyzerReference)value, CancellationToken.None);
         case WellKnownChecksumObjects.MetadataReference:
             return builder.Build((MetadataReference)value, CancellationToken.None);
         default:
             throw ExceptionUtilities.UnexpectedValue(kind);
     }
 }
        public void EmptyAssetChecksumTest()
        {
            var document = new AdhocWorkspace().CurrentSolution.AddProject("empty", "empty", LanguageNames.CSharp).AddDocument("empty", SourceText.From(""));
            var assetBuilder = new AssetBuilder(document.Project.Solution);

            var source = assetBuilder.Build(document.State, document.GetTextAsync().Result, CancellationToken.None);
            var metadata = assetBuilder.Build(new MissingMetadataReference(), CancellationToken.None);
            var analyzer = assetBuilder.Build(new AnalyzerFileReference("missing", new MissingAnalyzerLoader()), CancellationToken.None);

            Assert.NotEqual(source.Checksum, metadata.Checksum);
            Assert.NotEqual(source.Checksum, analyzer.Checksum);
            Assert.NotEqual(metadata.Checksum, analyzer.Checksum);
        }
Exemple #39
0
 // Use this for initialization
 void Start()
 {
     generatedObjects = new List<GameObject>();
     assetBuilder = AssetBuilder.GetComponent<AssetBuilder>();
     shipController = Ship.GetComponent<ShipController>();
 }
        private static async Task VerifyOptionSetsAsync(Workspace workspace, string language)
        {
            var assetBuilder = new AssetBuilder(workspace.CurrentSolution);
            var serializer = new Serializer(workspace.Services);

            var asset = assetBuilder.Build(workspace.Options, language, CancellationToken.None);

            using (var stream = SerializableBytes.CreateWritableStream())
            using (var writer = new ObjectWriter(stream))
            {
                await asset.WriteObjectToAsync(writer, CancellationToken.None).ConfigureAwait(false);

                stream.Position = 0;
                using (var reader = new ObjectReader(stream))
                {
                    var recovered = serializer.Deserialize<OptionSet>(asset.Kind, reader, CancellationToken.None);
                    var assetFromStorage = assetBuilder.Build(recovered, language, CancellationToken.None);

                    Assert.Equal(asset.Checksum, assetFromStorage.Checksum);

                    // option should be exactly same
                    Assert.Equal(0, recovered.GetChangedOptions(workspace.Options).Count());
                }
            }
        }
Exemple #41
0
 public static Asset Default(AssetBuilder builder) => builder.Build();
        public void Should_replace_line_breaks_with_new_line_characters()
        {
            // Arrange
            var builder = new AssetBuilder();
            var a1 = builder.Path("a.jst").Data(@"<h1>
            </h1>").Build();
            var a2 = builder.Path("b.jst").Data(@"<h1>
            </h1>").Build();

            var config = new TemplateConfiguration("JST", "tmpl", "jst");
            var tmpl = this.CreateTemplateAsset(config, a1, a2);

            // Act
            var data = tmpl.GetData();

            // Assert
            Assert.IsTrue(data.Contains("ns[\"a\"] = lazyTemplate('<h1>\\n</h1>');"));
            // Preserve whitespace.
            Assert.IsTrue(data.Contains("ns[\"b\"] = lazyTemplate('<h1>\\n    </h1>');"));
        }
        /// <summary>
        /// 编译FireML
        /// </summary>
        public FireMLRoot CompileFireML()
        {
            FireMLRoot root = new FireMLRoot();

            #region 读取Asset
            AssetBuilder assetBuilder = new AssetBuilder(this);
            assetBuilder.Build(assetFiles, root);
            #endregion

            #region 构造AST
            ASTBuilder astBuilder = new ASTBuilder(this);
            astBuilder.Build(plotFiles, root);
            #endregion

            #region AST合法性检查
            ASTChecker astChecker = new ASTChecker(this);
            astChecker.Check(root);
            #endregion

            #region 生成ID号
            IDGenerator idGenerator = new IDGenerator();
            idGenerator.Generate(root);
            #endregion

            #region 资源存在性检查
            //ContentChecker contentChecker = new ContentChecker(this);
            //contentChecker.Check(root);
            #endregion

            if (errorList.Count > 0)
                return null;
            else
                return root;
        }
        public static void Main(string[] args)
        {
            {
                #region Snippet_0a
                ILineFileFormat format = LineReaderMap.Default["ini"];
                #endregion Snippet_0a
            }
            {
                #region Snippet_0b
                ILineFileFormat format = IniLinesReader.Default;
                #endregion Snippet_0b
                ILineFileFormat format2a = LineReaderMap.Default["json"];
                ILineFileFormat format2b = JsonLinesReader.Default;
                ILineFileFormat format3a = LineReaderMap.Default["xml"];
                ILineFileFormat format3b = XmlLinesReader.Default;
                ILineFileFormat format4a = LineReaderMap.Default["resx"];
                ILineFileFormat format4b = ResxLinesReader.Default;
                ILineFileFormat format5a = LineReaderMap.Default["resources"];
                ILineFileFormat format5b = ResourcesLineReader.Default;
            }

            {
                #region Snippet_1a
                IEnumerable <ILine> key_lines = LineReaderMap.Default.ReadLines(
                    filename: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_1a
            }
            {
                #region Snippet_1b
                IEnumerable <KeyValuePair <string, IString> > string_lines = LineReaderMap.Default.ReadStringLines(
                    filename: "localization.ini",
                    lineFormat: LineFormat.Parameters,
                    throwIfNotFound: true);
                #endregion Snippet_1b
            }
            {
                #region Snippet_1c
                ILineTree tree = LineReaderMap.Default.ReadLineTree(
                    filename: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_1c
            }

            {
                #region Snippet_2a
                IEnumerable <ILine> key_lines_reader =
                    LineReaderMap.Default.FileReader(
                        filename: "localization.ini",
                        throwIfNotFound: true);
                #endregion Snippet_2a
            }
            {
                #region Snippet_2b
                IEnumerable <KeyValuePair <string, IString> > string_lines_reader =
                    LineReaderMap.Default.FileReaderAsStringLines(
                        filename: "localization.ini",
                        lineFormat: LineFormat.Parameters,
                        throwIfNotFound: true);
                #endregion Snippet_2b
                var lines = string_lines_reader.ToArray();
            }
            {
                #region Snippet_2c
                IEnumerable <ILineTree> tree_reader =
                    LineReaderMap.Default.FileReaderAsLineTree(
                        filename: "localization.ini",
                        throwIfNotFound: true);
                #endregion Snippet_2c
                var lines = tree_reader.ToArray();
            }

            {
                #region Snippet_3a
                Assembly            asm = typeof(LocalizationReader_Examples).Assembly;
                IEnumerable <ILine> key_lines_reader =
                    LineReaderMap.Default.EmbeddedReader(
                        assembly: asm,
                        resourceName: "docs.localization.ini",
                        throwIfNotFound: true);
                #endregion Snippet_3a
                var lines = key_lines_reader.ToArray();
            }
            {
                Assembly asm = typeof(LocalizationReader_Examples).Assembly;
                #region Snippet_3b
                IEnumerable <KeyValuePair <string, IString> > string_lines_reader =
                    LineReaderMap.Default.EmbeddedReaderAsStringLines(
                        assembly: asm,
                        resourceName: "docs.localization.ini",
                        lineFormat: LineFormat.Parameters,
                        throwIfNotFound: true);
                #endregion Snippet_3b
                var lines = string_lines_reader.ToArray();
            }
            {
                Assembly asm = typeof(LocalizationReader_Examples).Assembly;
                #region Snippet_3c
                IEnumerable <ILineTree> tree_reader =
                    LineReaderMap.Default.EmbeddedReaderAsLineTree(
                        assembly: asm,
                        resourceName: "docs.localization.ini",
                        throwIfNotFound: true);
                #endregion Snippet_3c
                var lines = tree_reader.ToArray();
            }

            {
                #region Snippet_4a
                IFileProvider       fileProvider     = new PhysicalFileProvider(Directory.GetCurrentDirectory());
                IEnumerable <ILine> key_lines_reader =
                    LineReaderMap.Default.FileProviderReader(
                        fileProvider: fileProvider,
                        filepath: "localization.ini",
                        throwIfNotFound: true);
                #endregion Snippet_4a
                var lines = key_lines_reader.ToArray();
            }
            {
                #region Snippet_4b
                IFileProvider fileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
                IEnumerable <KeyValuePair <string, IString> > string_lines_reader =
                    LineReaderMap.Default.FileProviderReaderAsStringLines(
                        fileProvider: fileProvider,
                        filepath: "localization.ini",
                        throwIfNotFound: true);
                #endregion Snippet_4b
                var lines = string_lines_reader.ToArray();
            }
            {
                #region Snippet_4c
                IFileProvider           fileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
                IEnumerable <ILineTree> tree_reader  =
                    LineReaderMap.Default.FileProviderReaderAsLineTree(
                        fileProvider: fileProvider,
                        filepath: "localization.ini",
                        throwIfNotFound: true);
                #endregion Snippet_4c
                var lines = tree_reader.ToArray();
            }

            {
                #region Snippet_5a
                using (Stream s = new FileStream("localization.ini", FileMode.Open, FileAccess.Read))
                {
                    IEnumerable <ILine> key_lines = IniLinesReader.Default.ReadLines(s);
                }
                #endregion Snippet_5a
            }
            {
                #region Snippet_5b
                using (Stream s = new FileStream("localization.ini", FileMode.Open, FileAccess.Read))
                {
                    IEnumerable <KeyValuePair <string, IString> > string_lines = IniLinesReader.Default.ReadStringLines(
                        stream: s,
                        lineFormat: LineFormat.Parameters);
                }
                #endregion Snippet_5b
            }
            {
                #region Snippet_5c
                using (Stream s = new FileStream("localization.ini", FileMode.Open, FileAccess.Read))
                {
                    ILineTree tree = IniLinesReader.Default.ReadLineTree(s);
                }
                #endregion Snippet_5c
            }


            {
                #region Snippet_6a
                string text = "Culture:en:Type:MyController:Key:Hello = Hello World!\n";
                using (TextReader tr = new StringReader(text))
                {
                    IEnumerable <ILine> key_lines = IniLinesReader.Default.ReadLines(tr);
                }
                #endregion Snippet_6a
            }
            {
                string text = "Culture:en:Type:MyController:Key:Hello = Hello World!\n";
                #region Snippet_6b
                using (TextReader tr = new StringReader(text))
                {
                    IEnumerable <KeyValuePair <string, IString> > string_lines = IniLinesReader.Default.ReadStringLines(
                        srcText: tr,
                        lineFormat: LineFormat.Parameters);
                }
                #endregion Snippet_6b
            }
            {
                string text = "Culture:en:Type:MyController:Key:Hello = Hello World!\n";
                #region Snippet_6c
                using (TextReader tr = new StringReader(text))
                {
                    ILineTree tree = IniLinesReader.Default.ReadLineTree(tr);
                }
                #endregion Snippet_6c
            }

            {
                #region Snippet_7a
                string text = "Culture:en:Type:MyController:Key:Hello = Hello World!\n";
                IEnumerable <ILine> key_lines =
                    IniLinesReader.Default.ReadString(
                        srcText: text);
                #endregion Snippet_7a
            }
            {
                string text = "Culture:en:Type:MyController:Key:Hello = Hello World!\n";
                #region Snippet_7b
                IEnumerable <KeyValuePair <string, IString> > string_lines =
                    IniLinesReader.Default.ReadStringAsStringLines(
                        srcText: text,
                        lineFormat: LineFormat.Parameters);
                #endregion Snippet_7b
            }
            {
                string text = "Culture:en:Type:MyController:Key:Hello = Hello World!\n";
                #region Snippet_7c
                ILineTree tree =
                    IniLinesReader.Default.ReadStringAsLineTree(
                        srcText: text);
                #endregion Snippet_7c
            }

            {
                #region Snippet_10a
                IAsset asset = IniLinesReader.Default.FileAsset(
                    filename: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_10a
            }
            {
                #region Snippet_10b
                Assembly asm   = typeof(LocalizationReader_Examples).Assembly;
                IAsset   asset = IniLinesReader.Default.EmbeddedAsset(
                    assembly: asm,
                    resourceName: "docs.localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_10b
            }
            {
                #region Snippet_10c
                IFileProvider fileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
                IAsset        asset        = IniLinesReader.Default.FileProviderAsset(
                    fileProvider: fileProvider,
                    filepath: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_10c
            }
            {
                Assembly      asm          = typeof(LocalizationReader_Examples).Assembly;
                IFileProvider fileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
                #region Snippet_10a2
                IAsset asset = LineReaderMap.Default.FileAsset(
                    filename: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_10a2
                #region Snippet_10b2
                asset = LineReaderMap.Default.EmbeddedAsset(
                    assembly: asm,
                    resourceName: "docs.localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_10b2
                #region Snippet_10c2
                asset = LineReaderMap.Default.FileProviderAsset(
                    fileProvider: fileProvider,
                    filepath: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_10c2
            }

            {
                #region Snippet_11a
                IAssetSource assetSource = IniLinesReader.Default.FileAssetSource(
                    filename: "localization.ini",
                    throwIfNotFound: true);
                IAssetBuilder assetBuilder = new AssetBuilder().AddSource(assetSource);
                IAsset        asset        = assetBuilder.Build();
                #endregion Snippet_11a
            }
            {
                #region Snippet_11b
                Assembly     asm         = typeof(LocalizationReader_Examples).Assembly;
                IAssetSource assetSource = IniLinesReader.Default.EmbeddedAssetSource(
                    assembly: asm,
                    resourceName: "docs.localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_11b
            }
            {
                #region Snippet_11c
                IFileProvider fileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
                IAssetSource  assetSource  = IniLinesReader.Default.FileProviderAssetSource(
                    fileProvider: fileProvider,
                    filepath: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_11c
            }
            {
                #region Snippet_11a2
                IAssetSource assetSource = LineReaderMap.Default.FileAssetSource(
                    filename: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_11a2
            }
            {
                Assembly asm = typeof(LocalizationReader_Examples).Assembly;
                #region Snippet_11b2
                IAssetSource assetSource = LineReaderMap.Default.EmbeddedAssetSource(
                    assembly: asm,
                    resourceName: "docs.localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_11b2
            }
            {
                IFileProvider fileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
                #region Snippet_11c2
                IAssetSource assetSource = LineReaderMap.Default.FileProviderAssetSource(
                    fileProvider: fileProvider,
                    filepath: "localization.ini",
                    throwIfNotFound: true);
                #endregion Snippet_11c2
            }

            {
                #region Snippet_7
                #endregion Snippet_7
            }
            {
                #region Snippet_8
                #endregion Snippet_8
            }
            {
                #region Snippet_9
                #endregion Snippet_9
            }
            {
                #region Snippet_12
                #endregion Snippet_12
            }
            {
                #region Snippet_13
                #endregion Snippet_13
            }
            {
                #region Snippet_14
                #endregion Snippet_14
            }
            {
                #region Snippet_15
                #endregion Snippet_15
            }
            {
                #region Snippet_16
                #endregion Snippet_16
            }
            {
                #region Snippet_17
                #endregion Snippet_17
            }
            {
                #region Snippet_18
                #endregion Snippet_18
            }
            {
                #region Snippet_30a
                // Create writer
                ILineReader format = new ExtFileFormatReader();

                // Clone formats
                LineFileFormatMap formats = LineReaderMap.Default.Clone();
                // Add to clone
                formats.Add(format);

                // Or if in deploying application project, format can be added to the global singleton
                (LineReaderMap.Default as IDictionary <string, ILineFileFormat>).Add(format);
                #endregion Snippet_30a
            }
        }
        private Asset GetOptionsAsset(Solution solution, string language, CancellationToken cancellationToken)
        {
            // TODO: we need better way to deal with options. optionSet itself is green node but
            //       it is not part of snapshot and can't save option to solution since we can't use language
            //       specific option without loading related language specific dlls
            var options = solution.Options;

            // we have cached options
            ValueTuple<OptionSet, Asset> value;
            if (_lastOptionSetPerLanguage.TryGetValue(language, out value) && value.Item1 == options)
            {
                return value.Item2;
            }

            // otherwise, we need to build one.
            var assetBuilder = new AssetBuilder(solution);
            var asset = assetBuilder.Build(options, language, cancellationToken);

            _lastOptionSetPerLanguage[language] = ValueTuple.Create(options, asset);
            return asset;
        }
        public async Task MetadataReference_RoundTrip_Test()
        {
            var hostServices = MefHostServices.Create(
                MefHostServices.DefaultAssemblies.Add(typeof(Host.TemporaryStorageServiceFactory.TemporaryStorageService).Assembly));

            var workspace = new AdhocWorkspace(hostServices);
            var reference = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);

            var serializer = new Serializer(workspace.Services);
            var trees = new ChecksumTreeCollection();
            var assetBuilder = new AssetBuilder(trees.CreateRootTreeNode(workspace.CurrentSolution.State));

            var assetFromFile = assetBuilder.Build(reference, CancellationToken.None);
            var assetFromStorage = await CloneMetadataReferenceAssetAsync(serializer, assetBuilder, assetFromFile).ConfigureAwait(false);
            var assetFromStorage2 = await CloneMetadataReferenceAssetAsync(serializer, assetBuilder, assetFromStorage).ConfigureAwait(false);
        }
        public async Task Missing_Metadata_Serailization_Test()
        {
            var workspace = new AdhocWorkspace();
            var reference = new MissingMetadataReference();

            var serializer = new Serializer(workspace.Services);
            var trees = new ChecksumTreeCollection();
            var assetBuilder = new AssetBuilder(trees.CreateRootTreeNode(workspace.CurrentSolution.State));

            // make sure this doesn't throw
            var assetFromFile = assetBuilder.Build(reference, CancellationToken.None);
            var assetFromStorage = await CloneAssetAsync(serializer, assetBuilder, assetFromFile).ConfigureAwait(false);
            var assetFromStorage2 = await CloneAssetAsync(serializer, assetBuilder, assetFromStorage).ConfigureAwait(false);
        }
        private static async Task<Asset> CloneMetadataReferenceAssetAsync(Serializer serializer, AssetBuilder assetBuilder, Asset asset)
        {
            using (var stream = SerializableBytes.CreateWritableStream())
            using (var writer = new ObjectWriter(stream))
            {
                await asset.WriteObjectToAsync(writer, CancellationToken.None).ConfigureAwait(false);

                stream.Position = 0;
                using (var reader = new ObjectReader(stream))
                {
                    var recovered = serializer.Deserialize<MetadataReference>(asset.Kind, reader, CancellationToken.None);
                    var assetFromStorage = assetBuilder.Build(recovered, CancellationToken.None);

                    Assert.Equal(asset.Checksum, assetFromStorage.Checksum);

                    return assetFromStorage;
                }
            }
        }
        public async Task Missing_Analyzer_Serailization_Desktop_Test()
        {
            var hostServices = MefHostServices.Create(
                MefHostServices.DefaultAssemblies.Add(typeof(Host.TemporaryStorageServiceFactory.TemporaryStorageService).Assembly));

            var workspace = new AdhocWorkspace(hostServices);
            var reference = new AnalyzerFileReference("missing_reference", new MissingAnalyzerLoader());

            var serializer = new Serializer(workspace.Services);
            var trees = new ChecksumTreeCollection();
            var assetBuilder = new AssetBuilder(trees.CreateRootTreeNode(workspace.CurrentSolution.State));

            // make sure this doesn't throw
            var assetFromFile = assetBuilder.Build(reference, CancellationToken.None);
            var assetFromStorage = await CloneAssetAsync(serializer, assetBuilder, assetFromFile).ConfigureAwait(false);
            var assetFromStorage2 = await CloneAssetAsync(serializer, assetBuilder, assetFromStorage).ConfigureAwait(false);
        }
            private async Task AddGlobalAssetsAsync(CancellationToken cancellationToken)
            {
                var snapshotService = _workspace.Services.GetService<ISolutionChecksumService>();
                var assetBuilder = new AssetBuilder(_workspace.CurrentSolution);

                foreach (var reference in _analyzerService.GetHostAnalyzerReferences())
                {
                    var asset = await assetBuilder.BuildAsync(reference, cancellationToken).ConfigureAwait(false);
                    snapshotService.AddGlobalAsset(reference, asset, cancellationToken);
                }
            }
Exemple #51
0
 static void CreateCoverFlowAsset()
 {
     AssetBuilder.CreateAsset <CoverFlowBuilder>();
 }