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); }
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"); }
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()); } } }
// 内部构建方法 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] 构建完成"); }
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(); } } }
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); }
/// <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); }
/// <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); }
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"); } } }
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); } }
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); }
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); }
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); } } }
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); }
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 />');")); }
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); } }
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); }
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); }
// 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()); } } }
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); } }
static void CreateCoverFlowAsset() { AssetBuilder.CreateAsset <CoverFlowBuilder>(); }