我正在尝试在构建期间连接几个文件,但是我尝试的方式剥离了标签和空格,使输出无格式化.
<CreateItem Include="Scripts\ApplicationModule.d.ts; Scripts\AccountModule.d.ts; Scripts\FeedModule.d.ts;">
<Output TaskParameter="Include" ItemName="ApplicationDefinitionFiles" />
</CreateItem>
<ReadLinesFromFile File="%(ApplicationDefinitionFiles.FullPath)">
<Output TaskParameter="Lines" ItemName="ApplicationDefinitionLines" />
</ReadLinesFromFile>
<WriteLinesToFile File="Scripts\ApplicationDefinition.d.ts" Lines="@(ApplicationDefinitionLines)" Overwrite="true" />
Run Code Online (Sandbox Code Playgroud)
保留格式的方法是什么?
我正在VS2015中开发一个Angular2应用程序,并为此设置了一个webpack捆绑和缩小环境.
这是我的webpack.conf.js
switch (process.env.NODE_ENV) {
case 'prod':
case 'production':
module.exports = require('./config/webpack.prod');
break;
case 'test':
case 'testing':
//module.exports = require('./config/webpack.test');
break;
case 'dev':
case 'development':
default:
module.exports = require('./config/webpack.dev');
}Run Code Online (Sandbox Code Playgroud)
我还安装了一个webpack任务运行器,它使用以下命令调用它
cmd /c SET NODE_ENV=development&& webpack -d --color
Run Code Online (Sandbox Code Playgroud)
和
cmd /c SET NODE_ENV=production&& webpack -p --color
Run Code Online (Sandbox Code Playgroud)
设置似乎工作正常.但是,我想将其与我的TFS构建CI集成.构建项目后应触发webpack命令,并在webpack构建失败时报告构建失败.我试图在我的.csproj文件中包含以下代码
<Target Name="AfterBuild">
<Exec Condition="$(Configuration) == 'Debug'" Command="cmd /c SET NODE_ENV=production&& webpack -p --color">
</Exec>
</Target>
Run Code Online (Sandbox Code Playgroud)
它失败了,错误9009
之后我尝试了,从安装了webpack的node_modules文件夹启动命令
<Target Name="AfterBuild">
<Exec Condition="$(Configuration) == 'Debug'" Command="./node_modules/.bin cmd /c SET NODE_ENV=production&& webpack -p --color">
</Exec>
</Target> …Run Code Online (Sandbox Code Playgroud) msbuild continuous-integration msbuild-task tfsbuild webpack
我正在编译时,我正在使用msbuild文件将一些文件复制到公共文档文件夹.我目前的脚本包括:
<Target Name="DeployToPublicDocuments"
Inputs="@(DeploymentItems)"
Outputs="$(PublicDocumentsFolder)%(Path)\%(DeploymentItems.RecursiveDir)%(DeploymentItems.Filename)%(DeploymentItems.Extension)">
<Copy SourceFiles="%(DeploymentItems.FullPath)"
DestinationFiles="$(PublicDocumentsFolder)%(Path)\%(DeploymentItems.RecursiveDir)%(DeploymentItems.Filename)%(DeploymentItems.Extension)"
Condition="!Exists('$(PublicDocumentsFolder)%(Path)\%(DeploymentItems.RecursiveDir)%(DeploymentItems.Filename)%(DeploymentItems.Extension)')" />
Run Code Online (Sandbox Code Playgroud)
此代码仅在目标不存在时复制.但是,如果我的源更新,我想替换目标.如何修改我的脚本以实现这一目标?我看到SkipUnchangedFiles标志,但它也比较文件大小以确定是否应覆盖目标.那不是我想要的.
我有一个项目,它有单独的客户端和服务器文件夹,我的目标是在服务器的发布过程中包含客户端文件。文件夹结构如下所示
|- server
| |- src
| |- MyProject
| |- MyProject.csproj
|- client
|- src
|- dist
Run Code Online (Sandbox Code Playgroud)
使用默认的 SPA 模板SpaRoot,在我的例子中定义了../../../client/src/以下项目组定义
<ItemGroup>
<DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
<DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" />
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</ResolvedFileToPublish>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
从日志中我可以看到这会导致将文件复制到其他地方Copying file from "C:\MyProject\client\src\dist\img\ic_mail.svg" to "C:\MyProject\server\src\MyProject\obj\Release\client\src\dist\img\ic_mail.svg".,而目标路径应该是C:\MyProject\server\src\MyProject\obj\Release\netcoreapp3.1\PubTmp\Out\appsettings.Development.json. 我假设这是由不同的父目录引起的,因为公共父目录位于层次结构的 3 级之上,并且文件也被复制到比应有的目录高 3 级的目录中。
我尝试在 前面加上前缀SpaRoot,$(ProjectDir)但这没有帮助。我的目标是将文件从dist文件夹复制到wwwroot发布文件夹的根目录。我尝试调整ResolvedFileToPublish,但无法检索项目的相对路径(相对于dist文件夹)。
编辑:基于 csproj 的解决方法是将文件手动复制到wwwroot挂钩中BeforeTargets …
我一直在使用SVN一段时间.最近我正在使用TFS的一个项目.在构建中,我喜欢在项目输出上追加/更新构建版本号.我在母版页上执行此操作,以便在应用程序中清晰可见.由于应用程序可以在多台计算机上运行,因此它是运行verison的便捷信息.
我在SVN世界中认识到:
<!-- Import of the MSBuildCommunityTask targets -->
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<!-- to AssemblyInfo to include svn revision number -->
<Target Name="BeforeBuild">
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\CollabNet Subversion Client">
<Output TaskParameter="Revision" PropertyName="Revision" />
</SvnVersion>
<Time>
<Output TaskParameter="Year" PropertyName="Year" />
<Output TaskParameter="Month" PropertyName="Month" />
<Output TaskParameter="Day" PropertyName="Day" />
</Time>
<FileUpdate Files="MasterPage.master" Regex="svn revision: (\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="svn revision: $(Year).$(Month).$(Day).$(Revision)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
如上所示,"BeforeBuild"任务使用YYYY.MM.DD.SVNVERSION标记更新masterPage.master文件.
如何使用TFS作为源控件来实现此目的.我如何获得TFS内部版本号?
我正在使用MSBuild Extension Pack(MEP)中的一些自定义任务.我的项目在许多文件中分开.在这些文件中,我使用(在两个/三个文件中两次或三次)导入MEP任务.这样做时我收到警告信息:
...警告MSB4011:"C:\ Program Files\MSBuild\ExtensionPack\MSBuild.ExtensionPack.tasks"无法再次导入.它已经导入"D:...\Tasker.proj(5,3)".这很可能是构建创作错误.此后续导入将被忽略.
有谁知道如何摆脱这个警告信息?请帮忙!
只是想知道是否有人知道是否有任何MSBuild入门套件.
我对初学者工具包的意思是,从它的外观大多数构建到有点相同的步骤,在这里和那里进行微小的改变(即大多数构建将运行测试,覆盖,压缩结果,生成报告,部署等) .大多数人一般都希望从CI构建,测试构建,发布构建大致相同,只是在这里和那里进行微小的更改.
现在不要误解我的意思,我认为大多数脚本最终都是完全不同的.但我不禁想到,大多数人的生活都相当相似.
因此,有没有人知道任何"初学者工具包"有一个dev/CI /测试/发布版本与大多数人想要的常见任务,你可以开始改变和修改?
干杯安东尼
有人可以编写(或链接)一个演练,该演练解释了如何创建自定义MSBuild任务并在构建期间运行它吗?我正在寻找一个继承自己的自定义任务,Microsoft.Build.Utilities.Task并且只执行此操作:
public override bool Execute()
{
Log.LogMessage("Hello world!");
return true;
}
Run Code Online (Sandbox Code Playgroud)
(我一直在研究这个问题几个小时,并继续得到"没有找到[任何]任务.查看以下"消息.我想我必须错过某个必要的步骤.如果有一个明确的教程我可以遵循,也许我会弄明白我的不足之处.)
我使用SVN作为我的源代码控制存储库,Jenkins作为我的CI工具.我使用Jenkins运行MSBuild脚本来进行实际的构建和部署.我还使用Jenkins Pipeline插件来管理下游项目的构建.
我的管道有问题.问题是,我已经对SVN进行了10次签到,结果发生了10次自动CI构建,结果管道显示了10次构建.现在,如果我想要把版本号5在管道中的下一个阶段我希望所有的代码到第五构建要建到下一个阶段,而是正在发生的事情是,最新的代码(建立10)一直在使用.
我不知道是否需要修改构建脚本或是否需要配置Jenkins或是否需要配置管道插件.有人知道吗?
如果您不知道管道插件的含义,请点击此处截图.

我试图转换我所拥有的项目中的所有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) msbuild-task ×10
msbuild ×9
tfsbuild ×2
.net ×1
c# ×1
csproj ×1
file-copying ×1
jenkins ×1
package ×1
sample ×1
slowcheetah ×1
svn ×1
tfs ×1
webpack ×1