diff --git a/AnPv2.sln.old b/AnPv2.sln.old deleted file mode 100644 index 38626be..0000000 --- a/AnPv2.sln.old +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.2.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CSharp", "CSharp", "{B41BF331-FCCB-2ADF-CDB6-767964B34647}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnP", "CSharp\AnP.csproj", "{720E15E3-2F0D-4B91-98F1-400300826A0A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {720E15E3-2F0D-4B91-98F1-400300826A0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {720E15E3-2F0D-4B91-98F1-400300826A0A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {720E15E3-2F0D-4B91-98F1-400300826A0A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {720E15E3-2F0D-4B91-98F1-400300826A0A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {720E15E3-2F0D-4B91-98F1-400300826A0A} = {B41BF331-FCCB-2ADF-CDB6-767964B34647} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {47442BB3-05F5-4AAF-A859-D456A81FC0A2} - EndGlobalSection -EndGlobal diff --git a/Public/ecma/Abstracts/BaseAbstract.ecma.js b/Public/ecma/Abstracts/BaseAbstract.ecma.js index ded4c74..7eef373 100644 --- a/Public/ecma/Abstracts/BaseAbstract.ecma.js +++ b/Public/ecma/Abstracts/BaseAbstract.ecma.js @@ -4,7 +4,7 @@ * @typedef {import("../Application/AnP.ecma.js").AnP} AnP */ -import {Utils} from "../Utils/Utils.ecma"; +import {Common} from "../Utils/Common.ecma"; import {Check} from "../Utils/Check.ecma"; /** @@ -78,7 +78,7 @@ export const BaseAbstract = (function(){ const constructor = () => { /** @type {base_abstract_get_value} */ - const get_value = anp.settings ? anp.settings.get : Utils.get_value; + const get_value = anp.settings ? anp.settings.get : Common.get_value; /** @type {Object.} */ this.allow_print = [ @@ -114,7 +114,7 @@ export const BaseAbstract = (function(){ * @access public */ this.extends = item => { - Utils.extends(self, item); + Common.extends(self, item); }; /** diff --git a/Public/ecma/Drivers/FilesDriver.ecma.js b/Public/ecma/Drivers/FilesDriver.ecma.js index e177b0a..9e76a0f 100644 --- a/Public/ecma/Drivers/FilesDriver.ecma.js +++ b/Public/ecma/Drivers/FilesDriver.ecma.js @@ -69,7 +69,7 @@ export const FilesDriver = (function(){ "timeout", "default_timeout" ], null, default_timeout); - Utils.execute(callback); + Common.execute(callback); return true; }; @@ -100,7 +100,7 @@ export const FilesDriver = (function(){ /** @type {XMLHttpRequest} */ const ajax = new XMLHttpRequest(), /** @type {number} */ - timeout = Utils.get_value([ + timeout = Common.get_value([ "timeout", "ajax_timeout", "default_timeout" ], inputs, default_timeout), /** @type {number} */ @@ -108,7 +108,7 @@ export const FilesDriver = (function(){ end = code => { code && (error |= 1 << code); !ended && (ended = true) && - Utils.execute( + Common.execute( callback, ajax.responseText, ajax.status, @@ -119,11 +119,11 @@ export const FilesDriver = (function(){ }; ajax.open( - Utils.get_value([ + Common.get_value([ "method", "http_method", "default_http_method" ], inputs, default_http_method), path, - Utils.get_value([ + Common.get_value([ "asynchronous", "http_asynchronous", "default_http_asynchronous" ], inputs, default_http_asynchronous) ); diff --git a/Public/ecma/Managers/I18NManager.ecma.js b/Public/ecma/Managers/I18NManager.ecma.js index 2fe360d..6450468 100644 --- a/Public/ecma/Managers/I18NManager.ecma.js +++ b/Public/ecma/Managers/I18NManager.ecma.js @@ -1,7 +1,7 @@ "use strict"; import {Check} from "../Utils/Check.ecma.js"; -import {Utils} from "../Utils/Utils.ecma.js"; +import {Common} from "../Utils/Common.ecma.js"; /** * @typedef {import("../Application/AnP.ecma.js").AnP} AnP @@ -57,7 +57,7 @@ export const I18NManager = (function(){ * @access public */ this.start = (callback = null) => { - Utils.execute_array([ + Common.execute_array([ "default_i18n_files", "i18n_files" ], (key, next_callback) => { self.add(anp.settings.get(key), next_callback, true); @@ -80,7 +80,7 @@ export const I18NManager = (function(){ /** @type {Array.} */ languages = [language_selected, default_language].concat(Object.keys(sentences)), /** @type {Array.} */ - keys = Utils.get_keys(texts); + keys = Common.get_keys(texts); if(keys.length) for(const language of languages){ @@ -104,7 +104,7 @@ export const I18NManager = (function(){ null) : null)) - return Utils.string_variables(( + return Common.string_variables(( Check.is_array(text) ? text.join("") : text), variables, _default); }; diff --git a/Public/ecma/Managers/IdentifiersManager.ecma.js b/Public/ecma/Managers/IdentifiersManager.ecma.js index 21c7642..88ca564 100644 --- a/Public/ecma/Managers/IdentifiersManager.ecma.js +++ b/Public/ecma/Managers/IdentifiersManager.ecma.js @@ -1,6 +1,6 @@ "use strict"; -import {Utils} from "../Utils/Utils.ecma.js"; +import {Common} from "../Utils/Common.ecma.js"; /** * @typedef {import("../Application/AnP.ecma.js").AnP} AnP @@ -59,7 +59,7 @@ export const IdentifiersManager = (function(){ do{ identifier = ""; - while((identifier += Utils.get_random(alphabet)).length < length); + while((identifier += Common.get_random(alphabet)).length < length); }while( identifiers.includes(identifier) || /^[^a-z]/i.test(identifier) || diff --git a/Public/ecma/Managers/SettingsManager.ecma.js b/Public/ecma/Managers/SettingsManager.ecma.js index 5a332c3..7c96e8a 100644 --- a/Public/ecma/Managers/SettingsManager.ecma.js +++ b/Public/ecma/Managers/SettingsManager.ecma.js @@ -1,6 +1,6 @@ "use strict"; -import {Utils} from "../Utils/Utils.ecma.js"; +import {Common} from "../Utils/Common.ecma.js"; /** * @typedef {import("../Application/AnP.ecma.js").AnP} AnP @@ -45,7 +45,7 @@ export const SettingsManager = (function(){ */ const constructor = () => { - customs = Utils.get_dictionary(customs); + customs = Common.get_dictionary(customs); }; @@ -55,12 +55,12 @@ export const SettingsManager = (function(){ * @access public */ this.start = (callback = null) => { - Utils.execute_array([ + Common.execute_array([ "default_settings_files", "settings_files" ], (key, next_callback) => { self.add(self.get(key), next_callback, true); }, () => { - Utils.execute_array([ + Common.execute_array([ "default_secrets_files", "secrets_files" ], (key, next_callback) => { self.add_secrets(self.get(key), next_callback, true); @@ -76,7 +76,7 @@ export const SettingsManager = (function(){ * @access public */ this.get = (keys, inputs = null, _default = null) => ( - Utils.get_value(keys, [inputs, customs, secrets, settings, SettingsManager.DEFAULT_SETTINGS], _default) + Common.get_value(keys, [inputs, customs, secrets, settings, SettingsManager.DEFAULT_SETTINGS], _default) ); /** diff --git a/Public/ecma/Utils/Utils.ecma.js b/Public/ecma/Utils/Common.ecma.js similarity index 72% rename from Public/ecma/Utils/Utils.ecma.js rename to Public/ecma/Utils/Common.ecma.js index d6a41b5..b9e8b87 100644 --- a/Public/ecma/Utils/Utils.ecma.js +++ b/Public/ecma/Utils/Common.ecma.js @@ -4,13 +4,13 @@ import {Check} from "./Check.ecma.js"; import {Options} from "./Options.ecma.js"; /** - * @class Utils + * @class Common * @constructor * @returns {void} * @access public * @static */ -export const Utils = (function(){ +export const Common = (function(){ /** * @callback utils_execute_callback @@ -31,22 +31,22 @@ export const Utils = (function(){ */ /** - * @constructs Utils + * @constructs Common * @returns {void} * @access private * @static */ - const Utils = function(){}; + const Common = function(){}; /** @type {Options} */ - Utils.GET_DICTIONARY_OPTIONS = new Options(Options.NO_OVERWRITE); + Common.GET_DICTIONARY_OPTIONS = new Options(Options.NO_OVERWRITE); /** @type {Options} */ - Utils.GET_VALUE_OPTIONS = new Options(Options.ALLOW_NULLS); + Common.GET_VALUE_OPTIONS = new Options(Options.ALLOW_NULLS); /** @type {string} */ - Utils.BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + Common.BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; /** @type {string} */ - Utils.RANDOM_ALPHABET = "bHMnuamw/RUBk+xNvCXghsPdlSFG12rLoT0O3VZ=5QeWyI8pADqjcEfJ9Kt64i7Yz"; + Common.RANDOM_ALPHABET = "bHMnuamw/RUBk+xNvCXghsPdlSFG12rLoT0O3VZ=5QeWyI8pADqjcEfJ9Kt64i7Yz"; /** * @param {...(any|null)} items @@ -54,12 +54,12 @@ export const Utils = (function(){ * @access public * @static */ - Utils.get_keys = (...items) => items.reduce((keys, item) => { + Common.get_keys = (...items) => items.reduce((keys, item) => { if(Check.is_key(item)) item in keys || keys.push(item); else if(Check.is_array(item)) - Utils.get_keys(...item).forEach(key => key in keys || keys.push(key)); + Common.get_keys(...item).forEach(key => key in keys || keys.push(key)); return keys; }, []); @@ -70,12 +70,12 @@ export const Utils = (function(){ * @access public * @static */ - Utils.get_dictionaries = (...items) => items.reduce((dictionaries, item) => { + Common.get_dictionaries = (...items) => items.reduce((dictionaries, item) => { if(Check.is_dictionary(item)) dictionaries.push(item); else if(Check.is_array(item)) - dictionaries.push(...Utils.get_dictionaries(...item)); + dictionaries.push(...Common.get_dictionaries(...item)); return dictionaries; }, []); @@ -87,19 +87,19 @@ export const Utils = (function(){ * @access public * @static */ - Utils.get_dictionary = (items, custom_options = 0) => { + Common.get_dictionary = (items, custom_options = 0) => { /** @type {Object.} */ const dictionary = {}, /** @type {Options} */ - options = new Options(custom_options, Utils.GET_DICTIONARY_OPTIONS); + options = new Options(custom_options, Common.GET_DICTIONARY_OPTIONS); if(Check.is_dictionary(items)){ for(const [key, value] of Object.entries(items)) dictionary[key] = value; }else if(Check.is_array(items)) items.forEach(item => { - for(const [key, value] of Object.entries(Utils.get_dictionary(item, options))) + for(const [key, value] of Object.entries(Common.get_dictionary(item, options))) if(options.overwrite || !(key in dictionary)) dictionary[key] = value; }); @@ -116,17 +116,17 @@ export const Utils = (function(){ * @access public * @static */ - Utils.get_value = (keys, inputs, _default = null, custom_options = 0) => { + Common.get_value = (keys, inputs, _default = null, custom_options = 0) => { /** @type {number} */ - const l = (keys = Utils.get_keys(keys)).length, + const l = (keys = Common.get_keys(keys)).length, /** @type {Options} */ - options = new Options(custom_options, Utils.GET_VALUE_OPTIONS); + options = new Options(custom_options, Common.GET_VALUE_OPTIONS); if(l){ /** @type {number} */ - const m = (inputs = Utils.get_dictionaries(inputs)).length; + const m = (inputs = Common.get_dictionaries(inputs)).length; for(let i = 0; i < l; i++) for(let j = 0; j < m; j++) @@ -144,9 +144,9 @@ export const Utils = (function(){ * @access public * @static */ - Utils.string_variables = (string, variables, _default = null) => { + Common.string_variables = (string, variables, _default = null) => { - variables = Utils.get_dictionary(variables || {}); + variables = Common.get_dictionary(variables || {}); return ("" + string).replace(/\{([a-z_][a-z0-9_]*)\}/gi, (all, key) => ( key in variables ? variables[key] : @@ -160,7 +160,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.to_kebab_case = string => ("" + string).replace(/([A-Z]+)|[^a-z0-9]+/g, (_, upper) => ( + Common.to_kebab_case = string => ("" + string).replace(/([A-Z]+)|[^a-z0-9]+/g, (_, upper) => ( upper ? "-" + upper.toLowerCase() : "-")); @@ -170,7 +170,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.to_snake_case = string => ("" + string).replace(/([A-Z]+)|[^a-z0-9]+/g, (_, upper) => ( + Common.to_snake_case = string => ("" + string).replace(/([A-Z]+)|[^a-z0-9]+/g, (_, upper) => ( upper ? "_" + upper.toLowerCase() : "_")); @@ -181,14 +181,14 @@ export const Utils = (function(){ * @access public * @static */ - Utils.attributes = (item, attributes) => { + Common.attributes = (item, attributes) => { for(const [key, value] of Object.entries(attributes)){ if(/^on[_\-]?/i.test(key) && Check.is_function(value)) item.addEventListener(key.toLowerCase().replace(/^on[_\-]?/, ""), event => { - Utils.execute(value, item, event); + Common.execute(value, item, event); }); else - item.setAttribute(Utils.to_kebab_case(key), value); + item.setAttribute(Common.to_kebab_case(key), value); }; }; @@ -199,7 +199,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.html = (item, ...structure) => { + Common.html = (item, ...structure) => { /** @type {Array.} */ const items = []; @@ -218,12 +218,12 @@ export const Utils = (function(){ /** @type {HTMLElement} */ element = document.createElement(tag); - attributes && Utils.attributes(element, attributes); + attributes && Common.attributes(element, attributes); if(children && children.length){ if(Check.is_string(children)) element.innerHTML += children; else - Utils.html(element, ...children); + Common.html(element, ...children); }; items.push(item.appendChild(element)); @@ -238,7 +238,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.unique = item => ( + Common.unique = item => ( Check.is_array(item) ? item.filter((item, i, array) => array.indexOf(item) == i) : Check.is_string(item) ? item.split("").filter((char, i, array) => array.indexOf(char) == i).join("") : item); @@ -250,7 +250,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.get_random = (from = null, to = null) => ( + Common.get_random = (from = null, to = null) => ( Check.is_array(from) || Check.is_string(from) ? from.length ? from[Math.random() * from.length >> 0] : null : Check.is_integer(from) ? ( to === null ? Math.random() * from >> 0 : @@ -270,7 +270,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.encode_data = data => btoa(encodeURIComponent(JSON.stringify(data)).replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode("0x" + p1))); + Common.encode_data = data => btoa(encodeURIComponent(JSON.stringify(data)).replace(/%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode("0x" + p1))); /** * @param {!string} code @@ -279,7 +279,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.decode_data = (code, is_json = true) => { + Common.decode_data = (code, is_json = true) => { /** @type {string} */ const data = decodeURIComponent(atob(code).split("").map(c => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join("")); @@ -299,7 +299,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.execute = (callback, ...inputs) => ( + Common.execute = (callback, ...inputs) => ( Check.is_function(callback) ? callback(...inputs) : null); @@ -312,13 +312,13 @@ export const Utils = (function(){ * @access public * @static */ - Utils.execute_array = (array, each_callback, end_callback = null, i = 0) => { + Common.execute_array = (array, each_callback, end_callback = null, i = 0) => { if(i < array.length) - Utils.execute(each_callback, array[i], () => { - Utils.execute_array(array, each_callback, end_callback, i + 1); + Common.execute(each_callback, array[i], () => { + Common.execute_array(array, each_callback, end_callback, i + 1); }); else - Utils.execute(end_callback); + Common.execute(end_callback); }; /** @@ -327,7 +327,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.get_array = item => Check.is_array(item) ? item : [item]; + Common.get_array = item => Check.is_array(item) ? item : [item]; /** * @param {!string} string @@ -335,7 +335,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.randomize_string = string => string.split("").sort(() => Utils.get_random() - 0.5).join(""); + Common.randomize_string = string => string.split("").sort(() => Common.get_random() - 0.5).join(""); /** * @param {?any} data @@ -343,7 +343,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.encrypt_data = data => Utils.encode_data(data).split("").map(character => Utils.RANDOM_ALPHABET[Utils.BASE64_ALPHABET.indexOf(character)]).join(""); + Common.encrypt_data = data => Common.encode_data(data).split("").map(character => Common.RANDOM_ALPHABET[Common.BASE64_ALPHABET.indexOf(character)]).join(""); /** * @param {string} data @@ -351,10 +351,10 @@ export const Utils = (function(){ * @access public * @static */ - Utils.decrypt_data = data => { + Common.decrypt_data = data => { /** @type {string} */ - const results = Utils.decode_data(data.split("").map(character => Utils.BASE64_ALPHABET[Utils.RANDOM_ALPHABET.indexOf(character)]).join(""), false); + const results = Common.decode_data(data.split("").map(character => Common.BASE64_ALPHABET[Common.RANDOM_ALPHABET.indexOf(character)]).join(""), false); try{ return JSON.parse(results) || results; @@ -369,7 +369,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.randomize_array = array => { + Common.randomize_array = array => { /** @type {number} */ const l = array.length - 1; @@ -377,7 +377,7 @@ export const Utils = (function(){ array.forEach((item, i) => { /** @type {number} */ - const j = Utils.get_random(l); + const j = Common.get_random(l); i != j && ([array[i], array[j]] = [array[j], array[i]]); @@ -392,7 +392,7 @@ export const Utils = (function(){ * @access public * @static */ - Utils.extends = (base, ...items) => { + Common.extends = (base, ...items) => { items.forEach(item => { Object.entries(item).forEach(([key, value]) => { base[key] = value; @@ -400,5 +400,5 @@ export const Utils = (function(){ }); }; - return Utils; + return Common; })(); \ No newline at end of file diff --git a/Python/Managers/I18NManager.py b/Python/Managers/I18NManager.py index d306dce..db6f6c7 100644 --- a/Python/Managers/I18NManager.py +++ b/Python/Managers/I18NManager.py @@ -3,7 +3,7 @@ from typing import Any, Self, Sequence, Optional from Interfaces.Application.AnPInterface import AnPInterface -from Utils.Utils import Utils +from Utils.Common import Common from Utils.Options import Options class I18NManager: @@ -28,7 +28,7 @@ class I18NManager: options:Options ) -> str|list[str]|None: - keys:list[str] = Utils.get_keys(strings) + keys:list[str] = Common.get_keys(strings) if len(keys): @@ -51,7 +51,7 @@ class I18NManager: self.__sentences[language][key] is not None ): return self.__sentences[language][key] - return Utils.get_strings(strings)[0] + return Common.get_strings(strings)[0] def get(self:Self, strings:str|Sequence[str], @@ -61,9 +61,9 @@ class I18NManager: ) -> Any|None: options:Options = Options(custom_options, self.GET_OPTIONS) - text:str|list[str]|None = self.__get_sentence(strings, Utils.get_array(languages), options) + text:str|list[str]|None = self.__get_sentence(strings, Common.get_array(languages), options) - return Utils.string_variables(( + return Common.string_variables(( text if isinstance(text, str) else "".join(text) if isinstance(text, (list, tuple)) else str(text)), inputs) diff --git a/Python/Managers/SettingsManager.py b/Python/Managers/SettingsManager.py index faf5af1..69d7b18 100644 --- a/Python/Managers/SettingsManager.py +++ b/Python/Managers/SettingsManager.py @@ -3,7 +3,7 @@ from typing import Any, Self, Sequence, Optional from Interfaces.Application.AnPInterface import AnPInterface -from Utils.Utils import Utils +from Utils.Common import Common from Utils.Options import Options class SettingsManager: @@ -19,7 +19,7 @@ class SettingsManager: ) -> None: self.anp:AnPInterface = anp - self.__inputs:dict[str, Any|None] = Utils.get_dictionary(inputs, Options.OVERWRITE) + self.__inputs:dict[str, Any|None] = Common.get_dictionary(inputs, Options.OVERWRITE) self.__secrets:dict[str, Any|None] = {} def get(self:Self, @@ -28,7 +28,7 @@ class SettingsManager: default:Any|None = None, custom_options:int = 0 ) -> Any|None: - return Utils.get_value(keys, ( + return Common.get_value(keys, ( inputs, self.__inputs, self.__secrets, self.DEFAUTL_SETTINGS ), default, Options(custom_options, self.GET_OPTIONS).get()) diff --git a/Python/Models/PrintTypeModel.py b/Python/Models/PrintTypeModel.py index 4a27aa1..35715a0 100644 --- a/Python/Models/PrintTypeModel.py +++ b/Python/Models/PrintTypeModel.py @@ -3,7 +3,7 @@ from typing import Optional, Self, Sequence from Utils.Color import Color -from Utils.Utils import Utils +from Utils.Common import Common class PrintTypeModel: @@ -25,6 +25,6 @@ class PrintTypeModel: name:str - for name in Utils.get_keys(names, self.names): + for name in Common.get_keys(names, self.names): if name not in self.names: self.names.append(name) \ No newline at end of file diff --git a/Python/Utils/Utils.py b/Python/Utils/Common.py similarity index 94% rename from Python/Utils/Utils.py rename to Python/Utils/Common.py index 925d79e..d774528 100644 --- a/Python/Utils/Utils.py +++ b/Python/Utils/Common.py @@ -7,7 +7,7 @@ from Utils.Check import Check from Utils.Options import Options from Utils.Patterns import RE -class Utils: +class Common: GET_DICTIONARY_OPTIONS:Options = Options(Options.NO_OVERWRITE) GET_VALUE_OPTIONS:Options = Options(Options.ALLOW_NULLS) @@ -111,11 +111,11 @@ class Utils: strings:list[str] = [] item:Any|None - for item in Utils.get_array(value): + for item in Common.get_array(value): if Check.is_string(item): item in strings or strings.append(item) elif Check.is_array(item): - strings.extend(Utils.get_strings(item)) + strings.extend(Common.get_strings(item)) return strings @@ -126,7 +126,7 @@ class Utils: default:Optional[str] = None ) -> str: - variables = Utils.get_dictionary(variables) + variables = Common.get_dictionary(variables) def callback(matches:REMatch) -> str: diff --git a/README.md b/README.md index 384bc13..3f841ea 100644 --- a/README.md +++ b/README.md @@ -36,4 +36,11 @@ sudo apt update sudo apt install -y dotnet-sdk-10.0 ``` -Luego, instalar el Pluggin Nuget de Visual Studio Code `C/C++ DevTools`. \ No newline at end of file +Luego, instalar el Pluggin Nuget de Visual Studio Code `C/C++ DevTools`. + +Para ejecutar un proyecto .NET desde Docker. + +```sh +#!/bin/bash +docker exec -it anp-dotnet dotnet run --project /workspace/CSharp/AnP.csproj -f net10.0 +``` \ No newline at end of file