HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html
2026-05-24 14:06:51 +08:00

478 lines
19 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ProjectFolderDependency | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ProjectFolderDependency | HiAPI-C# 2025 ">
<meta name="description" content="Exposes the absolute base directory of the project that owns this runner. Resolved at runtime via ; the host (e.g. LocalProjectService, a test harness) wires the provider to its known project root after the runner is constructed, because itself does not retain the baseDirectory argument it sees during XML deserialization. Consumed by syntaxes that need to resolve a project-relative path to an absolute file system location — e.g. for O&amp;lt;n&amp;gt; subprogram lookup under . Reading is not a substitute: that path is relative and resolving it via Path.GetFullPath would anchor against the process working directory, not the project root.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency">
<h1 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency" class="text-break">
Class ProjectFolderDependency
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.NcParsers.html">NcParsers</a>.<a class="xref" href="Hi.NcParsers.Dependencys.html">Dependencys</a>.<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.html">SystemWired</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Exposes the absolute base directory of the project that owns this
runner. Resolved at runtime via <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectoryProvider">BaseDirectoryProvider</a>;
the host (e.g. <code>LocalProjectService</code>, a test harness) wires the
provider to its known project root after the runner is constructed,
because <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> itself does not retain the
<code>baseDirectory</code> argument it sees during XML deserialization.</p>
<p>
Consumed by syntaxes that need to resolve a project-relative path
to an absolute file system location — e.g.
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html">SubProgramCallSyntax</a> for <code>O&lt;n&gt;</code>
subprogram lookup under
<a class="xref" href="Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html#Hi_NcParsers_Dependencys_Generic_SubProgramFolderConfig_InternalFolder">InternalFolder</a>.
Reading <a class="xref" href="Hi.NcParsers.Sentence.html#Hi_NcParsers_Sentence_FilePath">FilePath</a> is not a substitute: that
path is relative and resolving it via <code>Path.GetFullPath</code> would
anchor against the process working directory, not the project root.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ProjectFolderDependency : INcDependency, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ProjectFolderDependency</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(TSelf, params object[])</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__1___0_System_Action___0__">InvokeUtil.SelfInvoke&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Coloring.ColorUtil.html#Hi_Coloring_ColorUtil_GetGloomyColor_System_Object_System_Double_System_Double_">ColorUtil.GetGloomyColor(object, double, double)</a>
</div>
<div>
<a class="xref" href="Hi.Common.NameUtil.html#Hi_Common_NameUtil_GetSelectionName_System_Object_">NameUtil.GetSelectionName(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.StringUtil.html#Hi_Common_StringUtil_GetPropertyStringIfToStringNotOverloaded_System_Object_System_Boolean_System_Boolean_">StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool)</a>
</div>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency__ctor" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.#ctor">
ProjectFolderDependency()
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with no <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectoryProvider">BaseDirectoryProvider</a>; the host assigns one before queries.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ProjectFolderDependency()</code></pre>
</div>
<a id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency__ctor_System_Func_System_String__" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.#ctor(System.Func{System.String})">
ProjectFolderDependency(Func&lt;string&gt;)
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with the given <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectoryProvider">BaseDirectoryProvider</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ProjectFolderDependency(Func&lt;string&gt; provider)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>provider</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd><p>Delegate that resolves the absolute base directory at lookup time.</p>
</dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectory_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.BaseDirectory*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectory" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.BaseDirectory">
BaseDirectory
</h3>
<div class="markdown level1 summary"><p>The live absolute base directory, or null when
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectoryProvider">BaseDirectoryProvider</a> is unset or returns null.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string BaseDirectory { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectoryProvider_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.BaseDirectoryProvider*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectoryProvider" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.BaseDirectoryProvider">
BaseDirectoryProvider
</h3>
<div class="markdown level1 summary"><p>Runtime provider for the absolute project base directory.
Public so cross-assembly hosts (e.g. <code>LocalProjectService</code>
in HiNc) can wire it after the runner is constructed — same
host-wired posture as <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html#Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_KinematicsProvider">KinematicsProvider</a>.
Null provider or null return means the host has not configured
a base directory yet — consumers should treat this as a
configuration error and surface a diagnostic rather than
silently falling back.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Func&lt;string&gt; BaseDirectoryProvider { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_XName_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.XName*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_XName" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this dependency with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_MakeXmlSource_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Runtime-only dependency — the <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html#Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_BaseDirectoryProvider">BaseDirectoryProvider</a>
is wired per-host and is not meaningful to persist; serialization
writes only the empty element so the dependency survives an XML
round-trip.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_Reg_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_ProjectFolderDependency_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>