我试图转换我所拥有的项目中的所有web.config文件,这是我的树结构:
还有更多的web.config文件,但我们的想法是,它会找到所有这些文件并对它们应用相同的配置转换.
我从我发现的博客文章中得到了一些提示,但是我在最后一步,即实际的转变中陷入困境.中间还有一些我不喜欢的粗略部分(我不太明白我在做什么,我显然做错了).这是我到目前为止的地方:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile="Tools\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<SitePath>..\..\Website</SitePath>
<WebConfigTransformInputFile>$(SitePath)\Web.config</WebConfigTransformInputFile>
<WebConfigTransformFile>Web.Transform.config</WebConfigTransformFile>
<OutDir>..\N\N\</OutDir>
</PropertyGroup>
<ItemGroup>
<_FilesToTransform Include="$(SitePath)\**\web.config"/>
</ItemGroup>
<Target Name="Transform">
<MakeDir Directories="@(_FilesToTransform->'$(OutDir)%(RelativeDir)')" />
<TransformXml Source="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
Transform="$(WebConfigTransformFile)"
Destination="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我的Transform.bat看起来像这样:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Run Code Online (Sandbox Code Playgroud)
因此,当我调用批处理时,会创建相应的目录.然而,正如你所看到的,我必须对OutDir有点创意,使它成为..\N\N.出于某种原因,如果我不这样做,OutDir路径将与输入目录完全相同.所以我显然需要在MakeDir中改变一些东西,但我不确定是什么.
真正的问题出现在它开始进行变换时.我试图保持TransformXml Source参数像这样或类似:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Run Code Online (Sandbox Code Playgroud)
后者给我一个错误"无法打开源文件:不支持给定路径的格式." 而前者给了我这个输出:
Build started 30-4-2012 14:02:48.
Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" on node 1 (default targets).
Transform:
Creating directory "..\N\N\..\..\Website\Views\".
Transforming Source File: ..\N\N\..\..\Website\Views\Web.config;..\N\N\..\..\Website\Web.config
D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj(32,2): error : Could not open Source file: Could not …Run Code Online (Sandbox Code Playgroud) 场景:
我有一个带有自定义.config文件的类库项目.这些配置文件的构建操作设置为"内容"和"始终复制".然后,在同一解决方案中的至少4-5个控制台应用程序中引用此库项目.构建解决方案时,类库的程序集和自定义配置文件将复制到引用的项目bin文件夹中.
我想做什么:
使用SlowCheetah转换自定义配置文件
问题:
虽然SlowCheetah转换了类库项目中的配置文件,但它不会将转换后的文件复制到引用的项目中.即它始终复制源/原始文件.
找到了几个其他线程,但没有一个是基于SlowCheetah的解决方案,任何建议都会有所帮助.请注意,我使用的是Install Shield Limited Edition,因此该解决方案需要适用于.msi/setup文件.此外,我不想链接文件并对链接文件应用转换,因为我将不得不对所有引用的项目进行相同的转换.
谢谢
我知道如何使用SlowCheetah更改属性的值,但是如何更改元素的值.
app.Debug.config:
<applicationSettings>
<MyProgram.Properties.Settings>
<setting name="aName" serializeAs="String">
<value>myName</value>
</setting>
</MyProgram.Properties.Settings>
</applicationSettings>
Run Code Online (Sandbox Code Playgroud)
这是我在app.Staging.config中失败的尝试:
<applicationSetting>
<MyProgram.Properties.Settings>
<setting name="aName" serializeAs="String">
<value xdt:Transform="Replace" xdt:Locator="Match(value)">newName</value>
</setting>
</MyProgram.Properties.Settings>
</applicationSetting>
Run Code Online (Sandbox Code Playgroud) 我正在尝试ASP.NET Web site project在Visual Studio 2010中使用SlowCheetah XML Transforms和(不是ASP.NET Web应用程序项目).
当我右键单击Web.configASP.NET网站项目中的文件时,我Add Transform在上下文菜单中看不到" "项.
(注意:尝试使用ASP.NET Web应用程序项目时效果很好).
ASP.NET Web site project?可能有一个解决方法合并*.targets" Web部署项目2010 "和SlowCheetah 的" "文件...
asp.net xslt web-deployment-project vs-web-site-project slowcheetah
我们使用SlowCheetah配置转换来管理配置,所以在我的每个网络应用程序中我都有:
> Web.config
> Web.debug.config
> Web.release.config
Run Code Online (Sandbox Code Playgroud)
我想包括appSetting在将被添加到时可以安装包(然后Web.release.config文件NuGet包变换元件应用时,该项目在Release模式实际上是打包)
按照用于web.config通过使用web.config.transform文件转换实际文件的方法,我尝试将一个NuGet\Content\web.release.config.transform文件添加到我的NuGet包中,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="apiUsername" value="my_user" xdt:Transform="Replace" xdt:Locator="Match(key)" />
<add key="apiPassword" value="my_pass" xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
不行.web.config文件被转换,但web.*.config文件未被修改:
Attempting to resolve dependency 'NewtonSoft.Json (? 4.5.7)'.
Successfully installed 'Newtonsoft.Json 4.5.7'.
Successfully installed ''MyProject.Package 1.0.7409-unstable'.
Successfully added 'Newtonsoft.Json 4.5.7' to FortKnox.Web.
'web.debug.config' already exists. Skipping...
'web.release.config' already exists. Skipping...
Successfully added 'MyProject.Package 1.0.7409-unstable' to MyThing.Web
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我试图根据使用slowCheetah的构建配置文件更改我的默认用户配置,但是我无法找到正确的方法来使用它
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="MyApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<MyApp.Properties.Settings>
<setting name="Url" serializeAs="String">
<value>
something
</value>
</setting>
</MyApp.Properties.Settings>
</userSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我已经试了
<!-- & it's an & escaped in xml-->
<add key="MyApp.Properties.Settings.Url" value="www.google.com" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我怎样才能做到这一点?
我将SlowCheetah下载到旧的.Net 3.5 Web表单应用程序中,以便将转换添加到web.config.
我已经将SlowCheetah与Windows服务和控制台应用程序一起使用,以便在过去成功转换app.config.在这些情况下,配置将被转换并作为ApplicationName.exe.config放入bin中.
但是,使用此Web表单应用程序时,配置文件永远不会在bin中结束,因为Web表单站点是使用.dll放在bin中而构建的,IIS指向根目录以运行站点.因此,不是将web.config包含在构建过程中并打包在bin中,而是将其单独留在根位置.
没有转换应用于根目录中的web.config,这是一件好事,因为根目录中的web.config位于源代码管理中,并且是我们执行转换的文件.
我很高兴将web.config包含在构建中,以便slowCheetah转换它然后将其放入bin中.然后我们必须手动将它从bin中取出并将其放回到我们服务器的根级别,但是进行转换是值得的.
有没有人知道如何让变换运行我的web.config或将其包含在构建过程中,以便slowCheetah可以发挥其魔力?
谢谢!
更新
我修改了web.config的属性,它现在包含在构建中,但是,转换仍未应用于它.
构建操作:嵌入式资源
复制到输出控制器:始终复制
当您从 Visual Studio (2017) 启动 ASP.NET Core 项目时,它假定工作目录是源代码所在的位置,而不是实际放置构建文件的位置。
这意味着当我运行我的项目时,它从 读取配置文件C:\Path\To\My\Project\appsettings.json,而不是从C:\Path\To\My\Project\bin\Debug\appsettings.json.
当我调试这段代码时,我可以看到情况是这样的:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((context, config) => {
config.SetBasePath(context.HostingEnvironment.ContentRootPath);
config.AddJsonFile("appsettings.json", true, false);
});
Run Code Online (Sandbox Code Playgroud)
其中ContentRootPath指向项目文件夹,而不是放置构建文件的位置。
我可能可以通过设置Working Directoryin来解决这个问题Project Properties > Debug,但是由于我们还使用配置转换(SlowCheetah),每个开发人员都将拥有自己的调试输出构建配置(bin\Debug[CustomConfiguration]),并且.csproj对一个开发人员进行更改会破坏所有其他开发人员的配置。
有没有什么方法可以让 ASP.NET Core 从构建文件所在的位置而不是项目文件夹中读取配置文件,而无需更改Working Directory,但仍然适用于多个“构建配置”?
我正在尝试跟踪在加载任何网页时出现在sitecore 6.5上的NullReferenceException:
[NullReferenceException: Object reference not set to an instance of an object.]
Sitecore.Diagnostics.Log.Error(String message, Exception exception, Type ownerType) +133
Sitecore.Diagnostics.Log.Error(String message, Type ownerType) +45
Sitecore.Configuration.Factory.LoadAutoIncludeFiles(ConfigPatcher patcher, String folder) +680
Sitecore.Configuration.Factory.LoadAutoIncludeFiles(XmlNode element) +63
Sitecore.Configuration.Factory.GetConfiguration() +347
Sitecore.Diagnostics.LoggerFactory..cctor() +67
[TypeInitializationException: The type initializer for 'Sitecore.Diagnostics.LoggerFactory' threw an exception.]
Sitecore.Diagnostics.LoggerFactory.GetLogger(Type type) +17
Sitecore.Diagnostics.Log.Error(String message, Exception exception, Type ownerType) +93
Sitecore.Diagnostics.Log.Error(String message, Type ownerType) +45
Sitecore.Configuration.Factory.LoadAutoIncludeFiles(ConfigPatcher patcher, String folder) +680
Sitecore.Configuration.Factory.LoadAutoIncludeFiles(XmlNode element) +63
Sitecore.Configuration.Factory.GetConfiguration() +347
Sitecore.Configuration.Factory.GetConfigNode(String xpath, Boolean assert) +82
Sitecore.Configuration.Factory.GetConfigNode(String xpath) +29
Sitecore.Resources.Media.UploadWatcher.InitializeIgnoreList() …Run Code Online (Sandbox Code Playgroud) 我想使用Slow Cheetah转换.config文件。当前,我正在使用Visual Studio 2017,为此,我从nuget安装了Slow Cheetah 2.5.48,但是右键单击配置文件时未出现“添加转换”。
slowcheetah ×10
c# ×3
msbuild ×2
.net ×1
app-config ×1
appsettings ×1
asp.net ×1
asp.net-3.5 ×1
asp.net-core ×1
iis-7 ×1
msbuild-task ×1
nuget ×1
settings ×1
sitecore ×1
sitecore6 ×1
web-config ×1
webforms ×1
xpath ×1
xslt ×1