Msbuild 从目标文件中删除$(平台)

Msbuild 从目标文件中删除$(平台),msbuild,Msbuild,我有一个在部署时复制propper配置文件的代码: <PropertyGroup> <CopyAllFilesToSingleFolderForPackageDependsOn> CopyConfigFiles; $(CopyAllFilesToSingleFolderForPackageDependsOn); </CopyAllFilesToSingleFolderForPackageDependsOn>

我有一个在部署时复制propper配置文件的代码:

  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
        CopyConfigFiles;
        $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
  </PropertyGroup>
  <Target Name="CopyConfigFiles">
   <ItemGroup>
    <_ConfigFiles Include="Configurations\*.$(Platform).config" />
    <FilesForPackagingFromProject  Include="%(_ConfigFiles.Identity)">
      <DestinationRelativePath>%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
   </ItemGroup>
  </Target>

复制配置文件;
$(将所有文件复制到SingleFolderForpPackageDependson);
%(文件名)%(扩展名)
是否可以从结果文件中删除$(平台)

  • $(平台)=生产
  • 来源:connectionString.Production.config
  • 目标:connectionString.config

另一种解决方案是在项目中实际引用connectionString.config,并在预构建msbuuild步骤中将其替换为适当的版本

我们采用了类似的方法来处理特定于环境的配置文件(因此:

  • 网页。制作.config
  • web.登台.config
  • web.调试.config

    但是,预构建步骤用于选择其中一个文件并覆盖现有的web.config文件,因此在执行/部署/打包时,系统将处理正确的特定于环境的配置文件,名为web.config


Scott Hanselman很好地描述了这种方法。在我看来,最好的方法是“配置转换”。它们非常容易学习,非常强大,您只需要覆盖web.config中针对特定平台正在更改的部分,并且它们与Visual Studio捆绑在一起。 看看这个博客


我希望这会有所帮助。

不,即使设置为空,文件名中也会有一个双精度
,它会断开。
$(平台)
应该在
前面加前缀或附加前缀,然后它就可以变为空。@leppie,它是一个文件。因此它总是可以重命名。msbuild有复制和删除任务来进行重命名