2013-08-07 51 views
4

我有两个许可文件,我希望在我的\bin目录中包含这两个文件,这两个文件在构建时都会发布。将文件添加到构建和发布的bin目录中

这两个文件都在App_Data目录(其初始位置并不重要,他们只需要在\bin落得),并具有以下属性设置:

  • Build Action = Content
  • Copy to Output Directory = Copy Always

当我构建或发布时,它们不在\bin中。

我的设置有什么问题:设置,文件夹,文件,其他...?

UPDATE

我把文件从App_Data目录,并把他们在项目的根,现在它们被复制到\bin上构建。

回答

7

我已经通过稍微扩展我的.csproject文件在几个项目中完成了这项工作。下面的代码应该放在WebProject.csproj的Project节点的正下方。 的AfterBuild目标简单的拷贝一组文件(在这种情况下,“未引用的DLL”)从Visual Studio中建立正常时的bin文件夹。 CustomCollectFiles在部署时基本上做同样的事情。

<PropertyGroup> 
    <UnreferencedDlls>..\lib\Unreferenced\**\*.dll</UnreferencedDlls> 
    </PropertyGroup> 
    <PropertyGroup> 
    <CopyAllFilesToSingleFolderForPackageDependsOn> 
     CustomCollectFiles; 
     $(CopyAllFilesToSingleFolderForPackageDependsOn); 
    </CopyAllFilesToSingleFolderForPackageDependsOn> 
    </PropertyGroup> 
    <Target Name="AfterBuild"> 
    <Message Text="Copying unreferenced DLLs to bin" Importance="High" /> 
    <CreateItem Include="$(UnreferencedDlls)"> 
     <Output TaskParameter="Include" ItemName="_UnReferencedDLLs" /> 
    </CreateItem> 
    <Copy SourceFiles="@(_UnReferencedDLLs)" DestinationFolder="bin\%(RecursiveDir)" SkipUnchangedFiles="true" /> 
    </Target> 
    <Target Name="CustomCollectFiles"> 
    <Message Text="Publishing unreferenced DLLs" Importance="High" /> 
    <ItemGroup> 
     <_CustomFiles Include="$(UnreferencedDlls)" /> 
     <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
     <DestinationRelativePath>bin\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
     </FilesForPackagingFromProject> 
    </ItemGroup> 
    </Target> 

您需要修改的部分是基本UnreferencedDlls节点,以配合您的文件夹结构。 **\*.dll部分仅仅意味着“此处下面的任何级别的每个DLL文件”。

+0

听起来可行 - 我会试试 – wilsjd

+0

我加了这个,但它似乎没有做任何事情。 – wilsjd

+0

读这个更接近一点,我认为这只会在我有“总是复制”选项时正常工作?似乎该选项会将其复制到文件夹内的bin文件夹,然后将这些文件直接放入bin文件夹中,是吗? – wilsjd

0

不一定是直接的答案,但我强烈建议不使用在“发布”机制出炉,而是线了一个构建脚本(可能在PowerShell中),会做你需要的一切。将MSBuild和nUnit挂钩并复制文件并移动它们非常简单。

POWERSHELL(粗糙)例子。

# Get Directory Location 
$invocation = (Get-Variable MyInvocation).Value 
$directorypath = Split-Path $invocation.MyCommand.Path 

# Build the application using MSBuild 
cmd /c C:\Windows\Microsoft.NET\Framework\$v4_net_version\msbuild.exe "$directorypath\MyProject.sln" /p:Configuration=Release 

# Run the tests using nUnit 
cmd /c $directorypath\build\nunit\nunit-console.exe $solutionPath\MyProject.Tests\bin\debug\MyProject.Tests.dll 

# Copy the license to the appropriate directory 
Copy-Item -LiteralPath "$directorypath\mylicensefile.txt" "$directorypath\bin\release" -Force 

# NOTE: You are going to have to adjust this to match your solution and projects. 
+0

我得到了你的说法,但我们已经有了一个漂亮的建立工作流程。我明白为什么我们应该考虑朝着这样的方向前进。 – wilsjd

1

如果您使用的Visual Studio

  • 显示您的文件属性(您的文件或点击右键单击它然后选择属性
  • 复制到输出目录属性选择复制总是复制如果更新

在构建时,该文件会在bin目录下复制:调试或发布...

相关问题